Heim  >  Artikel  >  Backend-Entwicklung  >  Fragen zu PHP- und JS-Gleitkommaoperationen

Fragen zu PHP- und JS-Gleitkommaoperationen

一个新手
一个新手Original
2017-10-12 09:15:081233Durchsuche

Javascript

0,1 + 0,2 Warum ist es nicht gleich 0,3? (Richtiges Ergebnis: 0,30000000000000004)

0,8 * 7 Warum ist es nicht gleich 5,6? (Richtiges Ergebnis: 5,6000000000000005)

PHP

var_dump(intval(0.58 * 100));

Das korrekte Ergebnis ist 57, nicht 58

Die durch Gleitkommaoperationen verursachten Probleme

Tatsächlich sind diese Ergebnisse nicht der Fall Sprachfehler, die jedoch mit der Sprache zusammenhängen. Aufgrund des Implementierungsprinzips werden alle Zahlen in js als Zahlen vereinheitlicht, einschließlich Ganzzahlen, die eigentlich alle doppelte Typen sind.

Und PHP unterscheidet zwischen int und float. Unabhängig von der Sprache gibt es ähnliche Probleme, solange es sich um Gleitkommaoperationen handelt. Sie müssen daher bei der Verwendung darauf achten.

Gleitkomma-Binärprinzip

Gemäß dem internationalen Standard IEEE 754 kann jede binäre Gleitkommazahl V in der folgenden Form ausgedrückt werden:

V = (-1)s * M * E 

    1. (-1)s 表示符号位,当s=0,V为正数;当s=1,V为负数。
    2. M表示有效数字,大于等于1,小于2。
    3. 2E 表示指数位。

Zum Beispiel: Dezimal -5,0, binär geschrieben ist -101,0, was -1,01×22 entspricht. Dann ist s=1, M=1,01, E=2.
IEEE 754 schreibt vor, dass für eine 32-Bit-Gleitkommazahl das höchste 1 Bit das Vorzeichenbit s ist, die nächsten 8 Bits der Exponent E und die restlichen 23 Bits die signifikante Ziffer M sind.

Fragen zu PHP- und JS-Gleitkommaoperationen

Für eine 64-Bit-Gleitkommazahl ist das höchste 1 Bit das Vorzeichenbit S, die nächsten 11 Bits sind der Exponent E und die restlichen 52 Bits sind das signifikante Ziffer M.

Fragen zu PHP- und JS-Gleitkommaoperationen

IEEE 754 hat einige Sonderbestimmungen für die signifikante Ziffer M und den Exponenten E.

Wie bereits erwähnt, ist 1≤M6da58db456b81c5fd318b0712274c352

Das obige ist der detaillierte Inhalt vonFragen zu PHP- und JS-Gleitkommaoperationen. 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