ile czasu zajmuje komputerowi liczenie do jednego biliona

To jest pytanie, które pojawiło się po dyskusji z kolegą na temat firmy wartej ponad 20 bilionów dolarów – i po prostu nie mogliśmy sobie wyobrazić, jak taka ilość pieniędzy będzie wyglądać w gotówce. Aby się o tym zorientować, obliczyliśmy, ile setek banknotów potrzeba, aby okrążyć ziemię raz – odpowiedź brzmiała, jak sądzę, około 240.000.000, co oznacza około 24 miliardów dolarów amerykańskich. To dużo pieniędzy. Ile trzeba, żeby liczyć tyle pieniędzy? Cóż, nikt nie może powiedzieć na pewno.

ale możemy zrobić całkiem dobre wrażenie, ile potrzeba komputerowi, aby policzyć do jednego biliona. Aby po prostu iterować, nie ma innej akcji pomiędzy. W tym celu napisałem prosty fragment kodu, który mierzy, ile potrzeba, aby policzyć do miliona, a następnie wykonuje prostą matematykę, aby oszacować, ile potrzeba, aby policzyć do różnych wartości, a następnie wyświetla wyniki w przyjazny sposób za pomocą metody dzięki uprzejmości StackOverflow.

wyniki są ciekawe. A odpowiedź brzmi:: to zależy od twojej maszyny. Nawet na tej samej maszynie otrzymasz różne wyniki w zależności od obciążenia. Ale przyjrzyjmy się trochę mojemu:

  • jeden miliard (9 zer) jest osiągany szybko – 15 sekund
  • ale aby dostać się do jednego biliona (12 zer) – różnica jest niesamowita – 4 godziny i 10 minut. W zasadzie 1000 razy więcej.
  • Różnice stają się jeszcze bardziej imponujące, gdy przechodzimy do kwadrylionów (15 zer), które zajęłyby 173 dni, a następnie kwintylionów (18 zer), które zajęłyby 475 lat
  • ostatni, dla którego policzyłem, to jeden sekstylion (21 zer) i przygotuj się – iteracja do tej wartości zajęłaby mojemu laptopowi dokładnie 7708 lat, 292 dni, 6 godzin, 43 minuty i 52 sekundy.

jak już powiedziałem – te wartości w dużym stopniu zależą od maszyny. Więc możesz spróbować sam i może podzielić się wynikami. Kod poniżej:

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

co powiesz na iterację przez wszystkie GUID?

następnie, w prawdziwym duchu inżyniera, przerzuciłem się na inny temat – całkowicie związany (dla mnie) – wyjątkowość GUID. Wcześniej zadawałem sobie pytanie, jak wyjątkowy jest GUID. Wtedy otrzymałem odpowiedź, ale teraz wydaje mi się, że jest jeszcze bardziej jasna.

na początek – identyfikatory GUID są zwykle reprezentowane jako 32 cyfry szesnastkowe – co oznacza 10 więcej cyfr niż jeden sixtylion. Następnie, każda z cyfr w GUID może mieć wartości od 0 do F (16 wartości) w porównaniu do zwykłej liczby całkowitej, która pozwala tylko na 0 do 9 (co oznacza 10 wartości). I gdzie w poprzednim przykładzie liczyliśmy tylko jeden, tutaj przejdziemy do F.

więc jeśli moja matematyka jest poprawna, bierzemy czas z sixtylion (7708 lat) – pomnożymy go przez 10.000.000.000 (dziesięć zer), następnie przez 1.6 – jest 1.6 więcej wartości dla każdej cyfry – a następnie przez 16 (F).

to około 1.973.248.000.000.000 lat – czyli 1.973.248 milionów tysiącleci. Tyle zajęłoby mojemu laptopowi iterację wszystkich możliwych wartości GUID. Jakie to wyjątkowe?



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.