mennyi ideig tart egy PC-nek egy billióig számolni

Ez egy olyan kérdés, amely egy kollégával folytatott megbeszélés után merült fel egy több mint 20 billió dollár értékű vállalatnál-és egyszerűen nem tudtuk elképzelni, hogy ennyi pénz hogyan nézne ki készpénzben. Csak azért, hogy képet kapjunk róla, kiszámítottuk, hogy hány száz dolláros bankjegyre lenne szükség ahhoz, hogy egyszer körbejárjuk a Földet – a válasz az volt, hogy azt hiszem, körülbelül 240.000.000 körül, ami körülbelül 24 milliárd dollárt jelent. Ez sok pénz. Mennyibe kerül egy ember, hogy megszámolja ezt a sok pénzt? Nos, senki sem mondhatja biztosan.

de nagyon jó benyomást kelthetünk arról, hogy mennyi időbe telik egy számítógép, hogy akár egy billiót is megszámoljon. Egyszerűen iterálni, nincs más művelet között. Ehhez írtam egy egyszerű kóddarabot, amely megméri, hogy mennyit kell számolni egy millióig, majd egyszerű matematikát végez annak becsléséhez, hogy mennyi időbe telik a különböző értékek megszámlálása, majd barátságos módon jeleníti meg az eredményeket a StackOverflow jóvoltából.

Az eredmények érdekesek. És a válasz:: ez a géptől függ. Még ugyanazon a gépen is különböző eredményeket kap a terheléstől függően. De nézzük meg egy kicsit az enyémet:

  • egy milliárd (9 nulla) gyorsan elérhető – 15 másodperc
  • de egy billió (12 nulla) eléréséhez – a különbség elképesztő – 4 óra 10 perc. Alapvetően 1000 – szer több.
  • a különbségek még lenyűgözőbbé válnak, amikor felmegyünk a quadrillions-ra (15 nulla), ami 173 napot vesz igénybe, majd quintillions (18 nulla), ami 475 évet vesz igénybe
  • az utolsó, amelyre a matematikát végeztem, egy sextillion (21 nulla) és készen áll – a laptopomnak pontosan 7708 év, 292 nap, 6 óra, 43 perc és 52 másodperc kell ahhoz, hogy ezt az értéket megismételjem.

mint mondtam – ezek az értékek nagyban függenek a géptől. Tehát kipróbálhatja magát, és talán megoszthatja az eredményeket. Az alábbi kód:

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

mi lenne, ha az összes GUID-on keresztül iterálnánk?

ezután egy mérnök valódi szellemében átálltam egy másik témára – teljesen kapcsolódó (számomra) – a GUID egyediségére. Korábban feltettem magamnak a kérdést, hogy valójában mennyire egyedi a GUID. És akkor kaptam egy kicsit a választ, de most azt hiszem, ez még egyértelműbb.

kezdeni-GUID általában képviselteti magát 32 hexadecimális számjegy-ami azt jelenti, 10 több számjegy, mint egy sixtillion. Ezután ismét a GUID minden számjegyének értéke 0-tól F-ig (16 érték) lehet egy normál egész számhoz képest, amely csak 0-tól 9-ig (10 értéket jelent) enged meg. És ahol az előző példában csak egyig számoltunk, itt felmegyünk F.

tehát ha a matematikám helyes, akkor a sixtillionból (7708 év) vesszük az időt – szorozzuk meg 10.000.000.000 – rel (a tíz nullával), majd 1,6 – val-minden számjegyhez 1,6 további érték van -, majd 16-tal (F).

Ez körülbelül 1.973.248.000.000.000 év – azaz 1.973.248 millió évezred. Ennyibe kerülne a laptopom, hogy iteráljam a GUID összes lehetséges értékét. Mennyire egyedi ez?



Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.