Mengubah suai Pembundaran Titik Terapung dengan Cekap dalam Himpunan C dan x86
Nombor titik terapung IEEE 754 menawarkan pelbagai mod pembundaran, seperti terdekat, sifar, infiniti positif, dan infiniti negatif. Mengubah suai mod pembundaran membolehkan kawalan tepat ke atas perwakilan perpuluhan hasil.
C Solution
Pustaka standard C menyediakan penyelesaian mudah alih untuk mengubah mod pembundaran melalui fesetround( ) fungsi:
#include <fenv.h> #pragma STDC FENV_ACCESS ON int main() { // Save the original rounding mode int originalRounding = fegetround(); // Set the desired rounding mode (e.g., to zero) fesetround(FE_TOWARDZERO); // Perform operations with the adjusted rounding mode // Restore the original rounding mode fesetround(originalRounding); return 0; }
x86 Perhimpunan Penyelesaian
Untuk platform tanpa sokongan C99, pemasangan x86 boleh digunakan untuk mengubah suai kedua-dua unit x87 dan mod pembundaran SSE:
; x87 unit fldcw [new rounding mode] ; e.g., FNINIT to nearest ; SSE ldmxcsr [new rounding mode] ; e.g., MXCSR_RND_NEAREST
Microsoft Visual C
MSVC menawarkan fungsi _controlfp() bukan standard untuk ini tujuan:
#include <math.h> int main() { // Save the original rounding mode unsigned int originalRounding = _controlfp(0, 0); // Set the desired rounding mode (e.g., to zero) _controlfp(_RC_CHOP, _MCW_RC); // Perform operations with the adjusted rounding mode // Restore the original rounding mode _controlfp(originalRounding, _MCW_RC); return 0; }
Gelang Dekoder Mod Pembundaran
Rounding Mode | C Name | MSVC Name |
---|---|---|
Nearest | FE_TONEAREST | _RC_NEAR |
Zero | FE_TOWARDZERO | _RC_CHOP |
Infinity | FE_UPWARD | _RC_UP |
-Infinity | FE_DOWNWARD | _RC_DOWN |
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kawal Mod Pembundaran Titik Terapung dengan Cekap dalam Himpunan C dan x86?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!