cât durează un PC să numere până la un trilion
aceasta este o întrebare care a venit după o discuție cu un coleg despre o companie în valoare de peste 20 de trilioane de dolari – și pur și simplu nu ne-am putut imagina cum ar arăta atâția bani în numerar. Doar pentru a obține o idee de ea am calculat cât de multe sute de dolari facturile ar fi nevoie pentru a cerc pământul o dată – răspunsul a fost cred în jurul valorii de 240.000.000 sensul În jurul valorii de 24 miliarde de dolari SUA. Sunt mulți bani. Cât i-ar lua unei persoane să numere atâția bani? Ei bine, nimeni nu poate spune sigur.
dar putem face o impresie destul de bună despre cât de mult ar fi nevoie de un computer pentru a număra până la un trilion. Pentru a repeta pur și simplu, nici o altă acțiune între ele. Pentru că am scris o bucată simplă de cod care măsoară cât de mult este nevoie pentru a conta până la un milion și apoi face unele matematica simplu pentru a estima cât de mult ar fi nevoie pentru a conta până la valori diferite și apoi afișează rezultatele într-un mod prietenos, folosind o curtoazie metodă de StackOverflow.
rezultatele sunt interesante. Și răspunsul este: depinde de mașina ta. Chiar și pe aceeași mașină veți obține rezultate diferite în funcție de sarcină. Dar să ne uităm puțin la a mea:
- se ajunge rapid la un miliard (9 zerouri) – 15 secunde
- dar pentru a ajunge la un trilion (12 zerouri) – diferența este uimitoare – 4 ore și 10 minute. Practic de 1000 de ori mai mult.
- diferențele devin și mai impresionante pe măsură ce urcăm la cvadrilioane (15 zerouri) care ar dura 173 de zile și apoi cvintilioane (18 zerouri) care ar dura 475 de ani
- ultimul pentru care am făcut matematica este un sextilion (21 de zerouri) și ne pregătim – ar dura laptopul meu exact 7708 ani, 292 zile, 6 ore, 43 minute și 52 de secunde pentru a repeta până la acea valoare.
după cum am spus – aceste valori depind foarte mult de mașină. Deci, puteți încerca singur și poate împărtășiți rezultatele. Codul de mai jos:
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;}
Ce zici de iterarea prin toate GUID-urile?
apoi, în adevăratul spirit al unui inginer, am trecut la un alt subiect – total legat (pentru mine) – unicitatea Guid-urilor. M-am întrebat anterior cât de unic este de fapt un GUID. Și am primit oarecum răspunsul meu atunci, dar acum cred că este și mai clar.
pentru a începe – GUID – urile sunt de obicei reprezentate ca 32 de cifre hexazecimale-ceea ce înseamnă încă 10 cifre decât un sixtillion. Apoi, din nou, fiecare dintre cifrele dintr-un GUID poate avea valori de la 0 la F (16 valori) în comparație cu un număr întreg normal care permite doar 0 la 9 (adică 10 valori). Și unde în exemplul anterior am numărat până la unul singur, aici vom merge până la F.
deci, dacă matematica mea este corectă, luăm timpul de la sixtillion (7708 ani) – înmulțiți – l cu 10.000.000.000 (cele zece zerouri), apoi cu 1,6 – există 1,6 mai multe valori pentru fiecare cifră-și apoi cu 16 (F).
asta înseamnă 1.973.248.000.000.000 de ani – adică 1.973.248 milioane de milenii. Atât de mult ar fi nevoie de laptopul meu pentru a repeta toate valorile posibile ale unui GUID. Cât de unic este asta?