Heim Backend-Entwicklung C++ Warum unterscheiden sich die Ergebnisse der Gleitkomma-Arithmetik zwischen x86- und x64-Builds in MS VS 2010?

Warum unterscheiden sich die Ergebnisse der Gleitkomma-Arithmetik zwischen x86- und x64-Builds in MS VS 2010?

Oct 31, 2024 pm 07:36 PM

Why Do Floating-Point Arithmetic Results Differ Between x86 and x64 Builds in MS VS 2010?

Gleitkomma-Arithmetik-Diskrepanzen zwischen x86 und x64 in MS VS 2010

In Microsoft Visual Studio 2010 weisen Gleitkomma-Rechenoperationen Diskrepanzen auf zwischen x86- und x64-Builds, auch wenn sie auf demselben 64-Bit-Computer ausgeführt werden. Dies wird im folgenden Codeausschnitt deutlich:

<code class="c++">float a = 50.0f;
float b = 65.0f;
float c =  1.3f;
float d = a*c;
bool bLarger1 = d < b;
bool bLarger2 = (a*c) < b;</code>
Nach dem Login kopieren

Die boolesche Variable bLarger1 ist durchweg falsch, wobei d in beiden Builds auf 65,0 gesetzt ist. Allerdings ist bLarger2 für x64 falsch, für x86 jedoch wahr.

Der Übeltäter: x87 vs. SSE

Die Diskrepanz ergibt sich aus der Tatsache, dass der x86-Build x87 verwendet Gleitkommaeinheit (FPU), während der x64-Build die Einheit Streaming SIMD Extensions (SSE) verwendet. Der Unterschied liegt in der Präzision der Berechnungen.

Die x87-FPU führt Berechnungen standardmäßig mit doppelter Genauigkeit durch, auch wenn Werte mit einfacher Genauigkeit verarbeitet werden. Die SSE-Einheit hingegen führt Berechnungen mit reiner einfacher Genauigkeit durch. Daher sind x87-Berechnungen etwas genauer als SSE-Berechnungen.

In diesem Fall führt die erhöhte Präzision der x87-FPU zu einem Rundungsfehler, der dazu führt, dass d etwas weniger als 65,0 beträgt. Dies macht bLarger2 für x86 falsch. Im Gegensatz dazu liefert die SSE-Berechnung in x64 einen genaueren Wert für d, was zu einem echten Wert für bLarger2 führt.

Workaround für x86

Um den x86-Build zu erzwingen Um Berechnungen mit einfacher Genauigkeit durchzuführen, kann die folgende Zeile hinzugefügt werden:

<code class="c++">_controlfp(_PC_24, _MCW_PC);</code>
Nach dem Login kopieren

Dadurch wird das Gleitkomma-Steuerwort so eingestellt, dass alle Berechnungen mit einfacher Genauigkeit durchgeführt werden. Mit dieser Änderung werden sowohl bLarger1 als auch bLarger2 für x86- und x64-Builds auf „false“ gesetzt.

Fazit

Die Diskrepanz in der Gleitkomma-Arithmetik zwischen x86 und x64 Builds in MS VS 2010 ergeben sich aus dem Unterschied zwischen der x87-FPU und der SSE-Einheit. Die höhere Präzision der x87-FPU führt zu leicht unterschiedlichen Werten im Vergleich zu den echten Single-Precision-Berechnungen der SSE-Einheit. Durch das Erzwingen von Berechnungen mit einfacher Genauigkeit auf x86 können Entwickler dieses Problem entschärfen und konsistente Ergebnisse auf verschiedenen Plattformen sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum unterscheiden sich die Ergebnisse der Gleitkomma-Arithmetik zwischen x86- und x64-Builds in MS VS 2010?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

See all articles