Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengubah Mod Pembundaran Titik Terapung IEEE 754 dengan Cekap dalam Himpunan C dan x86?
Memanipulasi IEEE 754 Mod Pembundaran Titik Terapung
Aritmetik titik terapung selalunya melibatkan pembundaran nombor untuk menganggarkan hasil matematik sebenar. Piawaian IEEE 754 mentakrifkan beberapa mod pembundaran yang menentukan cara nombor titik terapung dibundarkan. Artikel ini meneroka kaedah yang cekap untuk menukar mod pembundaran dalam persekitaran pemasangan C atau x86 mudah alih.
Penyelesaian Standard C
Untuk kod C mudah alih, penyelesaiannya melibatkan penggunaan Fungsi C99 fesetround(), yang membolehkan anda menetapkan mod pembundaran. Walau bagaimanapun, anda harus ingat untuk memulihkan mod pembundaran asal selepas mengubah suainya.
#include <fenv.h> #pragma STDC FENV_ACCESS ON int main() { int originalRounding = fegetround(); fesetround(FE_TOWARDZERO); // Perform operations fesetround(originalRounding); return 0; }
x86 Assembly Solution
Jika anda bekerja pada platform lama tanpa sokongan C99 , anda mungkin perlu menggunakan pemasangan x86 untuk memanipulasi mod pembundaran. Ini melibatkan penetapan mod pembundaran dalam kedua-dua unit x87 (menggunakan arahan fldcw) dan SSE (menggunakan arahan ldmxcsr).
Penyelesaian Khusus MSVC
Untuk MS Visual C (MSVC), terdapat alternatif kepada pemasangan. Anda boleh menggunakan fungsi _controlfp() bukan standard untuk menukar mod pembundaran.
unsigned int originalRounding = _controlfp(0, 0); _controlfp(_RC_CHOP, _MCW_RC); // Do some operations _controlfp(originalRounding, _MCW_RC);
Pemalar Mod Pembulatan
Untuk menentukan mod pembundaran, anda perlu gunakan pemalar makro yang sesuai. Berikut ialah ringkasan nama C dan MSVC standard untuk mod pembundaran:
Rounding Mode | C | MSVC |
---|---|---|
Nearest | FE_TONEAREST | _RC_NEAR |
Toward Zero | FE_TOWARDZERO | _RC_CHOP |
Positive Infinity | FE_UPWARD | _RC_UP |
Negative Infinity | FE_DOWNWARD | _RC_DOWN |
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Mod Pembundaran Titik Terapung IEEE 754 dengan Cekap dalam Himpunan C dan x86?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!