Heim  >  Artikel  >  Web-Frontend  >  Analysieren Sie 0,1 + 0,2 != 0,3 in js

Analysieren Sie 0,1 + 0,2 != 0,3 in js

小云云
小云云Original
2018-02-23 10:27:502159Durchsuche

In Javascript gespeicherte Zahlen verwenden IEEE754 64-Bit-Gleitkommazahlen mit doppelter Genauigkeit

werden im Computer als 64-Bit
1 11 52
1 gespeichert: Vorzeichenbit 0 Positive Zahl 1 negative Zahl
11: Die Exponentenziffer wird zur Bestimmung des Bereichs verwendet
52: Die Mantissenziffer wird zur Bestimmung der Genauigkeit verwendet
Die umgewandelte Dezimaldarstellung ist

num = (-1)^s * (1.f) * 2^E
E = e - 1023
s:符号位
e:指数位
f:尾数位
1023偏正值 使得指数位真实取值为[-1023, 1024] 而非 [0, 2047] 目的是为了方便比较大小
实际指数值 = 阶码 - 偏正值
阶码 = 指数的移码 - 1
移码与补码符号为互为取反
举例:
如果指数位实际值为-1
原码:100 0000 0001
反码:111 1111 1110
补码:111 1111 1111
移码:011 1111 1111
阶码:011 1111 1110 = 1022
也可以通过
阶码 = 指数 + 偏正值 = -1 + 1023 = 1022 = 011 1111 1110来计算得到

Die Exponentenziffer ist alle 0 und alle 1 haben eine besondere Bedeutung, die später besprochen wird. Sie wird verwendet, um +-0 und +-∞ darzustellen

Sonderwerte

Analysieren Sie 0,1 + 0,2 != 0,3 in js

Maschinenpräzision
del = 2^-52

Erklären Sie als Nächstes, warum 0,1 + 0,2 = 0,30000000000000004
Zuallererst berechnen wir in Sprachen, die den IEEE754-Standard verwenden, die Binärzahl von 0,1
0,1 * 2 = 0
0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
0,2 * 2 = 0
...
also 0,1 im Binärformat. Für die 0,0001100110011001100...-Schleife kann
in 2^-4 * 1,100110011001100...
konvertiert werden, da es 52 reservierte Ziffern gibt Insgesamt, mit Ausnahme des Ganzzahlbits 1 ganz links, wird
schließlich im Computer gespeichert. Der Wert ist: 2^-4 * 1,100 11001100 11001100 11001100 11001100 11001100 11001100 1

Ähnlich. 0,2
0 .2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
0,2 * 2 = 0
0,4 * 2 = 0
0,8 * 2 = 1
0,6 * 2 = 1
...
Die Binärzahl von 0,2 ist also 0,001100110011001100...Schleife,
kann in 2^-3 * 1,100110011001100...
Der einfachste Wert umgewandelt werden zum endgültigen Speichern im Computer ist: 2^-3 * 1,100 11001100 11001100 11001100 11 001100 11001100 11001100 1
Addieren Sie die beiden
0,0001100 11001100 11001100. 11 001100 11001100 11001100 11001100 1
+
0,001100 11001100 1 1001100 11001100 11001100 11001100 11001100 1
= 0,0 10011001 10011001 10011001 10011001 10011001 10011001 10011
≈ 0. 30000000000000004



Das obige ist der detaillierte Inhalt vonAnalysieren Sie 0,1 + 0,2 != 0,3 in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn