首頁 >後端開發 >C++ >為什麼 Visual Studio 2010 中 x86 和 x64 的浮點運算不同?

為什麼 Visual Studio 2010 中 x86 和 x64 的浮點運算不同?

Barbara Streisand
Barbara Streisand原創
2024-11-01 05:04:27256瀏覽

Why does floating-point arithmetic differ between x86 and x64 in Visual Studio 2010?

x86 與x64 之間的浮點算術差異

在Visual Studio 2010 中,x86 與x64 版本之間的浮點算術存在明顯差異當比較某些表達式的值時出現。這種差異體現在以下程式碼:

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;

x86 和 x64 架構以不同的方式處理第二個表達式 bLarger2。在 x86 版本中,bLarger2 計算結果為 true,而在 x64 版本中,它的計算結果為 false。這種差異的根源在於浮點運算中表達式 (a * c) 的計算。

差異起源

差異的根源在於不同的兩種架構使用的浮點單元:x87 用於 x86,SSE 用於 x64。這兩個單位之間的根本區別在於它們的精度。 x87 單元預設採用高於單精度(通常是雙精度)的精度,而 SSE 單元僅以單精度運作。

修正差異

解決差異,可以手動配置 x87 單元的精確度以符合 SSE 單元的精確度。這可以透過執行以下命令在32 位元程式碼中實現:

_controlfp(_PC_24, _MCW_PC);

透過將精度設為單精度,bLarger2 表達式中(a * c) 的計算將與x64 的計算一致構建,導致bLarger1 和bLarger2 都設定為false。

結論

x86 和 x64 構建之間的浮點運算差異源於不同的精度等級x87 和 SSE 浮點單元。透過手動控制 x87 單元的精確度以符合 SSE 單元的精確度,可以消除差異,確保兩種架構的表達式評估一致。

以上是為什麼 Visual Studio 2010 中 x86 和 x64 的浮點運算不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn