2017-05-31 2 views
4

In JavaScript, war ich neugierig zu erfahren, was die maximalen möglich darstellbare Zahl in wissenschaftlicher Notation war, ohne sie „Infinity“ als Ergebnis, so schrieb ich ein kleines Programm und fand heraus, dass es das hier ist:Javascript - Was ist die maximale Anzahl in wissenschaftlicher Notation eingeschränkt?

17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779 

, die mit 1.7976931348623157e + 308 abgekürzt werden kann.

Meine Frage ist, was macht diese spezifische Zahl maximal möglich in JavaScript? Ist es Hardware-abhängig (vielleicht maximal 64 Bit) oder sprachspezifisch? Warum genau ist 308 die maximal nutzbare Leistung von 10?

Und auch, wie anders ist es in anderen Sprachen?

+1

https://tc39.github.io/ecma262/2017/#sec-terms-and-definitions-number-value BTW Sie könnten einfach 'Number.MAX_VALUE' verwenden, um diesen Wert zu erhalten –

+0

Welche anderen Sprachen denken Sie? Über? – Icepickle

+0

@YuryTarabanko Bummer.Nun, es hat Spaß gemacht, es trotzdem zu tun :) – Hankrecords

Antwort

6

Kurze Antwort:
Doppelpräzisionsschwimmer. Aufgrund wie der doppelte Datentyp definiert ist.

Lange Antwort:

Alle Gleitkommazahlen (Doppel ist eine doppelte Genauigkeit float) als Produkt von zwei Werten geschrieben, die Mantisse und den Exponenten. Im Prinzip funktioniert dies ähnlich, wie Zahlen in wissenschaftlicher Notation geschrieben werden: für die Nummer 1.34 * 10^24, ist die Mantisse 1,34 und der Exponent 24.

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

Number.MAX_VALUE

Der Wert von Number.MAX_VALUE ist der größte positive endliche Wert des Zahlentyps, der ungefähr 1,7976931348623157e + 308 beträgt.

Diese Eigenschaft hat die Attribute { [[Writable]]: false, [[Enumerable]]: fafalselse, [[Configurable]]: false }.

http://ecma262-5.com/ELS5_HTML.htm#Section_8.5

Was für Schwimmer unterscheidet (und Doppel) besteht darin, dass Sie die Gesamtanzahl der Bytes aufgeteilt, die die Zahl in zwei Teile zu halten, eine für die Mantisse und einen für den Exponenten.

Das gibt Ihnen einen Exponenten von 10 Bits und ein Vorzeichenbit für den Exponenten, so dass Sie eine Zahl von -1023 bis +1024 erhalten würden.

Die Basis des Exponenten ist jedoch nicht 10, sondern 2. Die Art, wie der Exponent der Gleitkommazahl gespeichert wird, verwendet 8 Bits (für Gleitkommazahlen) oder 11 Bits (für Doppel), was bedeutet, dass Sie Exponentenwerte von -127 erhalten bis +128 (float) oder -1023 bis +1024 (double).

Und 2^1024 gibt uns einen Wert von 1.797693134862315907729305190789 * 10^308, der der größte Exponent eines Floats mit doppelter Genauigkeit ist.

Verwandte Themen