Hvor lang TID tar DET EN PC å telle til en trillion
Dette er et spørsmål som kom etter en diskusjon med en kollega over et selskap verdt over 20 billioner dollar – og vi kunne bare ikke forestille oss hvordan så mye penger ville se ut i kontanter. Bare for å få et inntrykk av det vi beregnet hvor mange hundre dollarsedler det ville ta å sirkle Jorden en gang-svaret var jeg tror rundt 240.000.000 betyr rundt 24 milliarder dollar. Det er mye penger. Hvor mye vil det ta en person å telle så mye penger? Vel, ingen kan si sikkert.Men Vi kan gjøre et ganske godt inntrykk av hvor mye det ville ta en datamaskin å telle opp til en trillion. For å bare iterere, ingen annen handling i mellom. For det har jeg skrevet et enkelt stykke kode som måler hvor mye det tar å telle opp til en million, og gjør litt enkel matte for å anslå hvor mye det ville ta å telle opp til forskjellige verdier og deretter viser resultatene på en vennlig måte ved hjelp Av en metode med stackoverflow.
resultatene er interessante. Og svaret er: det avhenger av maskinen din. Selv på samme maskin får du forskjellige resultater avhengig av lasten. Men la oss se på meg litt:
- en milliard (9 nuller) nås raskt – 15 sekunder
- men for å komme til en trillion (12 nuller) – forskjellen er fantastisk – 4 timer og 10 minutter. I utgangspunktet 1000 ganger mer.forskjellene blir enda mer imponerende når vi går opp til quadrillions (15 nuller) som vil ta 173 dager og deretter quintillions (18 nuller) som vil ta 475 år
- den siste som jeg gjorde matte er en sextillion (21 nuller) og gjør deg klar – det ville ta min laptop nøyaktig 7708 år, 292 dager, 6 timer, 43 minutter og 52 sekunder å iterere opp til den verdien.
som jeg har sagt – disse verdiene avhenger mye av maskinen. Så du kan prøve det selv og kanskje dele resultatene. Koden nedenfor:
static void Main(string args){ var startTimestamp = DateTime.Now; for (int i = 0; i <= 1000000; i++); var elapsedTime = DateTime.Now - startTimestamp; Console.WriteLine(string.Format("{0} for 1 billion (9 zeros),", GetReadableString(new TimeSpan(elapsedTime.Ticks * 1000)))); Console.WriteLine(string.Format("{0} for 1 trillion (12 zeros)", GetReadableString(new TimeSpan(elapsedTime.Ticks * 1000000)))); Console.WriteLine(string.Format("{0} for 1 quadrillion (15 zeros)", GetReadableString(new TimeSpan(elapsedTime.Ticks * 1000000000)))); Console.WriteLine(string.Format("{0} for 1 quintillion (18 zeros)", GetReadableString(new TimeSpan(elapsedTime.Ticks * 1000000000000)))); Console.WriteLine(string.Format("and {0} for it to count up to 1 sextillion (21 zeros).", GetReadableString(new TimeSpan(elapsedTime.Ticks * 1000000000000000)))); Console.ReadKey();} private static string GetReadableString(TimeSpan span){ string formatted = string.Format("{0}{1}{2}{3}{4}", span.Duration().Days > 364 ? string.Format("{0:0} year{1}, ", span.Days / 365, span.Days == 365 ? string.Empty : "s") : string.Empty, span.Duration().Days > 0 ? string.Format("{0:0} day{1}, ", span.Days % 365, span.Days % 365 == 1 ? String.Empty : "s") : string.Empty, span.Duration().Hours > 0 ? string.Format("{0:0} hour{1}, ", span.Hours, span.Hours == 1 ? String.Empty : "s") : string.Empty, span.Duration().Minutes > 0 ? string.Format("{0:0} minute{1}, ", span.Minutes, span.Minutes == 1 ? String.Empty : "s") : string.Empty, span.Duration().Seconds > 0 ? string.Format("{0:0} second{1}", span.Seconds, span.Seconds == 1 ? String.Empty : "s") : string.Empty); if (formatted.EndsWith(", ")) formatted = formatted.Substring(0, formatted.Length - 2); if (string.IsNullOrEmpty(formatted)) formatted = "0 seconds"; return formatted;}
hva med å iterere gjennom Alle Guidene?
da, i en ingeniørs sanne ånd, byttet jeg til et annet emne – helt relatert (for Meg) – den unike egenskapen Til GUIDs. Jeg hadde tidligere spurt meg selv hvor unik EN GUID faktisk er. Og jeg fikk noe svar da, men nå tror jeg det er enda tydeligere.
til start – GUIDs er vanligvis representert som 32 heksadesimale sifre-som betyr 10 flere sifre enn en sekstillion. Så igjen kan hver av sifrene i EN GUID ha verdier fra 0 Til F (16 verdier) sammenlignet med et normalt heltall som bare tillater 0 til 9 (som betyr 10 verdier). Så hvis min matte er riktig, tar vi tiden fra sixtillion (7708 år) – multipliser den med 10.000.000.000 (de ti nuller), deretter med 1,6 – det er 1,6 flere verdier for hvert siffer-og deretter med 16 (F).
det handler om 1.973.248.000.000.000 år-som betyr 1.973.248 millioner årtusener. Det er hvor mye det ville ta min laptop å iterere gjennom alle mulige verdier av EN GUID. Nå hvor unikt er det?