Jak dlouho to trvá POČÍTAČ počítat na jeden bilion

Toto je otázka, která přišla po diskusi s kolegou přes nějakou společnost v hodnotě více než 20 bilionů dolarů – a nemohli jsme si představit, jak moc peněz by to vypadalo v hotovosti. Jen, aby získali představu o tom jsme spočítali, kolik stovek dolarových bankovek, že by se ke kruhu na Zemi jednou – odpověď byla myslím kolem 240.000.000 smyslu kolem 24 miliard amerických dolarů. To je hodně peněz. Kolik by člověk potřeboval, aby spočítal tolik peněz? No, nikdo nemůže s jistotou říci.

ale můžeme udělat docela dobrý dojem, kolik by počítač potřeboval, aby počítal až jeden bilion. Chcete-li jednoduše iterovat, žádná jiná akce mezi tím. Na to jsem si napsal jednoduchý kus kódu, který měří, kolik je potřeba počítat až jeden milion, a pak dělá jednoduchý matematický výpočet, odhad, jak moc by se počítat na různé hodnoty a zobrazí výsledky v přátelské způsobem pomocí metody laskavým svolením StackOverflow.

výsledky jsou zajímavé. A odpověď je: záleží na vašem stroji. Dokonce i na stejném stroji získáte různé výsledky v závislosti na zatížení. Ale pojďme se podívat na moje na chvíli:

  • jedna miliarda (9 nul) je dosaženo rychle – 15 sekund
  • ale dostat se do jednoho bilionu (12 nul) – rozdíl je úžasný – 4 hodiny a 10 minut. V podstatě 1000 krát více.
  • rozdíly se ještě více působivé, jak jsme jít až kvadriliony (15 nul), které by se 173 dny a pak quintillions (18 nul), které by 475 let
  • poslední jeden, pro který jsem udělal matematika je jedním sextillionu (21 nul) a získat ready – to by si můj notebook přesně 7708 let, 292 dní, 6 hodin, 43 minut a 52 sekund iterovat až do té hodnoty.

jak jsem již řekl-Tyto hodnoty závisí hodně na stroji. Takže si to můžete vyzkoušet sami a možná sdílet výsledky. Kód níže:

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

jak se o iteraci přes všechny GUID?

pak jsem v pravém duchu inženýra přešel na jiné téma – zcela související (pro mě) – jedinečnost Guidů. Předtím jsem se ptal sám sebe, jak jedinečný GUID ve skutečnosti je. A já jsem tenkrát dostal svou odpověď, ale teď si myslím, že je to ještě jasnější.

na začátek-GUID jsou obvykle reprezentovány jako 32 hexadecimálních číslic-což znamená 10 více číslic než jeden sixtillion. Pak znovu, každou číslici v GUID může mít hodnoty od 0 do F (16 hodnot) ve srovnání s normální číslo, které umožňuje pouze od 0 do 9 (tedy 10 hodnot). A kde v předchozím příkladu jsme zjistili jen jeden, tady půjdeme do F.

Takže, když je moje matematika je správné, jsme si čas od sixtillion (7708 let) – vynásobte to o 10.000.000.000 (deset nul), pak o 1,6 – tam jsou 1,6 více hodnot pro každou číslici a pak o 16 (F).

to je asi 1.973.248.000.000.000 let-což znamená 1.973.248 milionů tisíciletí. To je, kolik by trvalo, než by můj notebook iteroval všechny možné hodnoty GUID. Jak Unikátní to je?



Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.