hur lång tid tar det en dator att räkna till en biljon

det här är en fråga som kom efter en diskussion med en kollega över ett företag värt över 20 biljoner dollar – och vi kunde bara inte föreställa oss hur mycket pengar skulle se ut i kontanter. Bara för att få en uppfattning om det beräknade vi hur många hundra dollarräkningar det skulle ta att cirkla jorden en gång – svaret var jag tror runt 240.000.000 vilket betyder omkring 24 miljarder dollar. Det är mycket pengar. Hur mycket skulle det ta en person att räkna så mycket pengar? Tja, ingen kan säga säkert.

men vi kan göra ett ganska bra intryck av hur mycket det skulle ta en dator att räkna upp till en biljon. För att helt enkelt iterera, ingen annan åtgärd däremellan. För det har jag skrivit en enkel kod som mäter hur mycket det tar att räkna upp till en miljon och sedan gör en enkel matematik för att uppskatta hur mycket det skulle ta att räkna upp till olika värden och visar sedan resultaten på ett vänligt sätt med hjälp av en metod med tillstånd av StackOverflow.

resultaten är intressanta. Och svaret är: det beror på din maskin. Även på samma maskin får du olika resultat beroende på belastningen. Men låt oss titta på min för lite:

  • en miljard (9 nollor) nås snabbt – 15 sekunder
  • men för att komma till en biljon (12 nollor) – skillnaden är fantastisk – 4 timmar och 10 minuter. I grund och botten 1000 gånger mer.skillnaderna blir ännu mer imponerande när vi går upp till quadrillions (15 nollor) som skulle ta 173 dagar och sedan quintillions (18 nollor) som skulle ta 475 år
  • den sista som jag gjorde matten är en sextillion (21 nollor) och gör dig redo – det skulle ta min bärbara dator exakt 7708 år, 292 dagar, 6 timmar, 43 minuter och 52 sekunder för att iterera upp till det värdet.

som jag har sagt-dessa värden beror mycket på maskinen. Så du kan prova själv och kanske dela resultaten. Kod nedan:

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;}

vad sägs om att iterera genom alla GUID?

sedan, i en ingenjörs sanna anda, bytte jag till ett annat ämne – helt relaterat (för mig) – GUIDs unika egenskaper. Jag hade tidigare frågat mig själv hur unik en GUID faktiskt är. Och jag fick något svar då men nu tycker jag att det är ännu tydligare.

till start – GUID representeras vanligtvis som 32 hexadecimala siffror-vilket betyder 10 fler siffror än en sixtillion. Sedan kan var och en av siffrorna i en GUID ha värden från 0 till F (16 värden) jämfört med ett normalt heltal som bara tillåter 0 till 9 (vilket betyder 10 värden). Och var i föregående exempel räknade vi upp till bara en, här går vi upp till F.

Så om min matte är korrekt tar vi tiden från sextillionen (7708 år) – multiplicera den med 10.000.000.000 (de tio nollorna), sedan med 1,6 – det finns 1,6 fler värden för varje siffra – och sedan med 16 (F).

det handlar om 1.973.248.000.000.000 år-vilket betyder 1.973.248 miljoner årtusenden. Det är hur mycket det skulle ta min bärbara dator att iterera genom alla möjliga värden för en GUID. Hur unikt är det nu?



Lämna ett svar

Din e-postadress kommer inte publiceras.