suchen
HeimBackend-EntwicklungPHP-TutorialAnalyse der Fallstricke von PHP- und JS-Gleitkommaoperationen

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

Das durch Gleitkommaoperationen verursachte Problem

Tatsächlich handelt es sich bei diesen Ergebnissen nicht um Sprachfehler, sondern um das Implementierungsprinzip der Sprache. Alle Zahlen in js werden als Zahl vereinheitlicht, einschließlich Ganzzahlen, bei denen es sich tatsächlich alle um doppelte Genauigkeitstypen handelt.

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.

Analyse der Fallstricke von 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.

Analyse der Fallstricke von 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≤M

Was den Index E betrifft, ist die Situation komplizierter.

Erstens ist E eine vorzeichenlose Ganzzahl (unsigned int). Das heißt, wenn E 8 Bit groß ist, liegt sein Wertebereich zwischen 0 und 255; wenn E 11 Bit groß ist, liegt sein Wertebereich zwischen 0 und 2047. Wir wissen jedoch, dass E in der wissenschaftlichen Schreibweise eine negative Zahl sein kann, daher schreibt IEEE 754 vor, dass der reale Wert von E um eine Zwischenzahl von E subtrahiert werden muss. Für ein 8-Bit-E beträgt diese Zwischenzahl 127 Die mittlere Zahl ist 1023.
Zum Beispiel ist das E von 210 10. Wenn es also als 32-Bit-Gleitkommazahl gespeichert wird, muss es als 10 (der reale Wert von E) + 127 = 137 (E) gespeichert werden 10001001.

Dann kann der Index E weiter in drei Situationen unterteilt werden:
(1) E ist nicht ganz 0 oder nicht ganz 1. Zu diesem Zeitpunkt wird die Gleitkommazahl durch die oben genannten Regeln dargestellt, dh der berechnete Wert des Exponenten E wird von 127 (oder 1023) subtrahiert, um den realen Wert zu erhalten, und dann wird die erste 1 vor der signifikanten Ziffer hinzugefügt M.
(2) E ist alles 0. Zu diesem Zeitpunkt ist der Exponent E der Gleitkommazahl gleich 1-127 (oder 1-1023), und die effektive Ziffer M addiert nicht mehr die erste 1, sondern wird auf eine Dezimalzahl von 0,xxxxxx reduziert. Dies geschieht zur Darstellung von ±0 und sehr kleinen Zahlen nahe 0.
(3) E ist alles 1. Wenn zu diesem Zeitpunkt die signifikanten Ziffern M alle 0 sind, bedeutet dies ±unendlich (das Vorzeichenbit hängt vom Vorzeichenbit s ab); wenn die signifikanten Ziffern M nicht alle 0 sind, bedeutet dies, dass die Zahl keine Zahl ist (NaN). ). >

Das obige ist der detaillierte Inhalt vonAnalyse der Fallstricke von 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
Erläutern Sie das Konzept einer PHP -Sitzung in einfachen Worten.Erläutern Sie das Konzept einer PHP -Sitzung in einfachen Worten.Apr 26, 2025 am 12:09 AM

PhpSessionStrackUserDataacrossMultiplePageRequestsusesuseiquiTIdStoredInacookie.her'ShowtomagetheFectiv: 1) StartaSessionswithSession_start () und storateatain $ _Session.2) regeneratethessionSessionInoginWithSession_IDENT_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTE_IDENTEL

Wie schleifen Sie alle in einer PHP -Sitzung gespeicherten Werte durch?Wie schleifen Sie alle in einer PHP -Sitzung gespeicherten Werte durch?Apr 26, 2025 am 12:06 AM

In PHP können durch Sitzungsdaten in den folgenden Schritten iteriert werden: 1. Starten Sie die Sitzung mit Session_Start (). 2. Iterieren Sie durch die Foreach-Schleife durch alle Schlüsselwertpaare im $ _Session-Array. 3. Wenn Sie komplexe Datenstrukturen verarbeiten, verwenden Sie is_array () oder is_object () Funktionen und verwenden Sie print_r (), um detaillierte Informationen auszugeben. 4. Bei der Optimierung von Traversal kann Paging verwendet werden, um eine gleichzeitige Verarbeitung großer Datenmengen zu vermeiden. Auf diese Weise können Sie PHP -Sitzungsdaten in Ihrem tatsächlichen Projekt effizienter verwalten und verwenden.

Erklären Sie, wie Sie Sitzungen für die Benutzerauthentifizierung verwenden.Erklären Sie, wie Sie Sitzungen für die Benutzerauthentifizierung verwenden.Apr 26, 2025 am 12:04 AM

Die Sitzung realisiert die Benutzerauthentifizierung über den serverseitigen Statusverwaltungsmechanismus. 1) Erstellung der Sitzung und Erzeugung eindeutiger IDs, 2) IDs werden durch Cookies weitergeleitet, 3) Server speichert und greift auf Sitzungsdaten über IDs, 4) Benutzerauthentifizierung und Statusverwaltung zugeordnet und verbessert die Sicherheit und die Benutzererfahrung von Anwendungen.

Geben Sie ein Beispiel dafür, wie Sie den Namen eines Benutzers in einer PHP -Sitzung speichern.Geben Sie ein Beispiel dafür, wie Sie den Namen eines Benutzers in einer PHP -Sitzung speichern.Apr 26, 2025 am 12:03 AM

TostoreaussersnameInaphpSession, startTheSessionwithSession_Start (), thenAnthenameto $ _Session ['Benutzername']

Was sind einige häufige Probleme, die dazu führen können, dass PHP -Sitzungen scheitern?Was sind einige häufige Probleme, die dazu führen können, dass PHP -Sitzungen scheitern?Apr 25, 2025 am 12:16 AM

Gründe für einen Phpessionsfehler sind Konfigurationsfehler, Cookie -Probleme und Sitzungsablauf. 1. Konfigurationsfehler: Überprüfen Sie die richtige Sitzung und setzen Sie die korrekte Sitzung. 2. Kookie -Problem: Stellen Sie sicher, dass der Cookie korrekt eingestellt ist. 3.Sesion läuft ab: Passen Sie die Sitzung an.

Wie debuggen Sie Probleme im Zusammenhang mit Sitzungen in PHP?Wie debuggen Sie Probleme im Zusammenhang mit Sitzungen in PHP?Apr 25, 2025 am 12:12 AM

Zu den Methoden zur Debugg -Sitzungsprobleme in PHP gehören: 1. Überprüfen Sie, ob die Sitzung korrekt gestartet wird. 2. Überprüfen Sie die Lieferung der Sitzungs -ID; 3. Überprüfen Sie den Speicher und das Lesen von Sitzungsdaten. 4. Überprüfen Sie die Serverkonfiguration. Durch Ausgabe von Sitzungs-ID und Daten, Anzeigen von Sitzungsdateiinhalten usw. können Sie effektiv Diagnose und Lösen von Sitzungen im Zusammenhang mit Sitzungen diagnostizieren und lösen.

Was passiert, wenn Session_Start () mehrmals aufgerufen wird?Was passiert, wenn Session_Start () mehrmals aufgerufen wird?Apr 25, 2025 am 12:06 AM

Mehrere Anrufe bei Session_Start () führen zu Warnmeldungen und möglichen Datenüberschreibungen. 1) PHP wird eine Warnung ausstellen und veranlassen, dass die Sitzung gestartet wurde. 2) Dies kann zu unerwarteten Überschreibungen von Sitzungsdaten führen. 3) Verwenden Sie Session_Status (), um den Sitzungsstatus zu überprüfen, um wiederholte Anrufe zu vermeiden.

Wie konfigurieren Sie die Sitzungslebensdauer in PHP?Wie konfigurieren Sie die Sitzungslebensdauer in PHP?Apr 25, 2025 am 12:05 AM

Das Konfigurieren des Sitzungslebenszyklus in PHP kann durch Einstellen von Sitzungen erreicht werden. 1) Session.gc_maxLifetime steuert die Überlebenszeit der serverseitigen Sitzungsdaten, 2) Sitzung.cookie_Lifetime steuert den Lebenszyklus von Client-Cookies. Wenn der Keks auf 0 eingestellt ist, läuft es, wenn der Browser geschlossen ist.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen