Melaraskan Gelagat Pembundaran Titik Terapung Secara Mudah Alih
Keperluan untuk mengubah suai mod pembundaran IEEE 754 timbul dalam pelbagai senario. Artikel ini menerangkan kaedah yang cekap untuk mencapai matlamat ini, dalam kedua-dua C mudah alih dan menggunakan bahasa himpunan x86.
C Solution
C99 menyediakan penyelesaian komprehensif untuk memanipulasi mod pembundaran:
#include <fenv.h> #pragma STDC FENV_ACCESS ON int main() { // Preserve the initial rounding mode const int roundingMode = fegetround(); // Set the desired rounding mode (towards zero) fesetround(FE_TOWARDZERO); // Perform floating-point operations... // Revert to the original rounding mode fesetround(roundingMode); return 0; }
Perhimpunan x86 Penyelesaian
Pada platform yang tidak menyokong C99, pemasangan x86 menawarkan alternatif:
Unit Titik Terapung x87: Gunakan fldcw untuk melaraskan mod pembundaran.
Unit SSE: Gunakan ldmxcsr untuk konfigurasikan mod pembundaran SIMD.
Penyelesaian Khusus MSVC
Microsoft Visual C menyediakan fungsi _controlfp() bukan standard:
unsigned int roundingMode = _controlfp(0, 0); _controlfp(_RC_CHOP, _MCW_RC); // ... _controlfp(roundingMode, _MCW_RC);
Pemalar Mod Pembundaran
Jadual berikut menyediakan rujukan untuk pemalar mod pembundaran:
Rounding Mode | C Name | MSVC Name |
---|---|---|
Nearest | FE_TONEAREST | _RC_NEAR |
Towards Zero | FE_TOWARDZERO | _RC_CHOP |
Positive Infinity | FE_UPWARD | _RC_UP |
Negative Infinity | FE_DOWNWARD | _RC_DOWN |
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaraskan Gelagat Pembundaran Titik Terapung dengan Mudah Alih dalam C dan Himpunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!