Problem mit der PHP-Präzisionsberechnung
PHP-Präzisionsberechnungsproblem
Werfen wir einen Blick auf ein interessantes Phänomen in PHP: var_dump( intval(0.58 * 100 ) ); Raten Sie mal, welches Ergebnis dieser Code ausgeben wird?
Das Ausgabeergebnis ist 57, nicht 58
Warum ist das so? Dies alles wird durch Gleitkomma-Arithmetik verursacht.
Eigentlich 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, 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.
Gleitkommazahlen, beispielsweise mit einer Länge von 64 Bit (doppelte Genauigkeit), werden durch 1 Vorzeichenbit (E), 11 Exponentenbits (Q) und 52 Mantissen (M) (64) dargestellt Bits insgesamt).
Vorzeichenbit: Das höchste Bit stellt das Vorzeichen der Daten dar, 0 steht für eine positive Zahl und 1 steht für eine negative Zahl.
Exponentenbit: Stellt die Potenz der Daten zur Basis 2 dar, und der Exponent wird durch einen Offset-Code dargestellt.
Mantisse: Stellt die signifikanten Stellen nach dem Dezimalpunkt der Daten dar.
Die wichtigsten Punkte hier sind die Darstellung von Dezimalzahlen im Binärformat. Ich werde hier nicht näher darauf eingehen binäre Darstellung, 0,58 ist ein unendlicher Wert (die Zahlen unten lassen die implizite 1 weg). von 0,57 ist grundsätzlich (52 Bits): 0 01000111101011100001010001111010111000010100011110
Die Binärzahlen der beiden, wenn sie nur durch diese 52 Bits berechnet werden, sind:
0,58 -> 0,579999999 999999960,57 -> 0,56999999999999999
Was 0,58 * 100 betrifft, denken wir nicht im Detail über die spezifische Multiplikation von Gleitkommazahlen nach. Wir betrachten es nur vage mit Kopfrechnen ... 0,58 * 100 = 57,999999999
Dann wenn Wenn Sie es intvalieren, wird es natürlich 57 sein...
Es ist ersichtlich, dass der Kernpunkt dieses Problems ist: „Sie scheinen eine endliche Dezimalzahl zu haben, aber in der binären Darstellung ist sie unendlich.“ der Computer"
Es gibt eine Ungenauigkeit bei +-*%/ im PHP-Gleitkommatyp
Wir können das Problem ungenauer Gleitkommaoperationen durch die folgenden häufig verwendeten Hochkommaoperationen lösen: Präzisionsfunktionen:bcadd – Addiere zwei hochpräzise Zahlen bccomp – Vergleiche zwei hochpräzise Zahlen und gebe -1, 0, 1 zurück
bcdiv – Dividieren Sie zwei hochpräzise Zahlen
bcmod – Ermitteln Sie den Rest einer hochpräzisen Zahl
bcmul – Multiplizieren Sie zwei hochpräzise Zahlen
bcpow – Ermitteln Sie die Potenz von a hochpräzise Zahl
bcpowmod – Ermitteln Sie die Potenz einer hochpräzisen Zahl und modulieren Sie sie, sehr häufig in der Zahlentheorie verwendet
bcscale – konfigurieren Sie die Standardanzahl von Dezimalstellen, äquivalent zu „ scale=" in Linux bc
bcsqrt – finde die Quadratwurzel einer hochpräzisen Zahl
bcsub – kombiniere zwei hochpräzise Zahlen Less
Das obige ist der detaillierte Inhalt vonProblem mit der PHP-Präzisionsberechnung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In dem Artikel werden OWASP Top 10 Schwachstellen in PHP- und Minderungsstrategien erörtert. Zu den wichtigsten Problemen gehören die Injektion, die kaputte Authentifizierung und XSS mit empfohlenen Tools zur Überwachung und Sicherung von PHP -Anwendungen.

Die JIT -Kompilierung von PHP 8 verbessert die Leistung, indem häufig ausgeführte Code in den Maschinencode zusammengestellt wird, um Anwendungen mit schweren Berechnungen zugute und die Ausführungszeiten zu reduzieren.

In dem Artikel wird die symmetrische und asymmetrische Verschlüsselung in PHP erörtert und ihre Eignung, Leistung und Sicherheitsunterschiede verglichen. Die symmetrische Verschlüsselung ist schneller und für Massendaten geeignet, während asymmetrisch für den sicheren Schlüsselaustausch verwendet wird.

In dem Artikel wird das Sicherung von PHP -Dateien -Uploads erläutert, um Schwachstellen wie die Code -Injektion zu verhindern. Es konzentriert sich auf die Dateitypvalidierung, den sicheren Speicher und die Fehlerbehandlung, um die Anwendungssicherheit zu verbessern.

In dem Artikel wird die Implementierung einer robusten Authentifizierung und Autorisierung in PHP erörtert, um den nicht autorisierten Zugriff zu verhindern, Best Practices zu beschreiben und sicherheitsrelevante Tools zu empfehlen.

In dem Artikel werden Strategien erörtert, um CSRF-Angriffe in PHP zu verhindern, einschließlich der Verwendung von CSRF-Token, selben Cookies und ordnungsgemäßem Sitzungsmanagement.

In Artikel werden Best Practices für die Validierung der PHP-Eingabe erörtert, um die Sicherheit zu verbessern und sich auf Techniken wie die Verwendung integrierter Funktionen, den Whitelist-Ansatz und die serverseitige Validierung zu konzentrieren.

In dem Artikel werden Strategien zur Implementierung der API-Rate in PHP erörtert, einschließlich Algorithmen wie Token-Bucket und Leaky Bucket sowie Bibliotheken wie Symfony/Rate-Limiter. Es deckt auch die Überwachung, die dynamischen Einstellungsgeschwindigkeiten und die Hand ab
