Memanipulasi Mod Pembundaran Titik Terapung: Pendekatan Cekap
Meningkatkan operasi titik terapung selalunya melibatkan kawalan mod pembundaran mereka, yang menentukan cara keputusan dibundarkan selepas pengiraan. Artikel ini meneroka teknik paling cekap untuk mengubah mod pembundaran, memenuhi kedua-dua fungsi C mudah alih dan penyelesaian pemasangan x86.
Fungsi C Mudah Alih:
Piawaian C99 menyediakan fegetround() dan fesetround() berfungsi untuk mendapatkan dan menetapkan mod pembundaran. Berikut ialah coretan kod yang mempamerkan penggunaannya:
#include <fenv.h> #pragma STDC FENV_ACCESS ON int main() { // Store the initial rounding mode int originalRounding = fegetround(); // Set the rounding mode to round towards zero fesetround(FE_TOWARDZERO); // Perform calculations and rounding operations // Reset the original rounding mode fesetround(originalRounding); return 0; }
x86 Assembly Solution:
Jika menyasarkan platform yang tidak mempunyai sokongan C99, gunakan arahan pemasangan x86 untuk memanipulasi mod pembundaran . Ini melibatkan tetapan untuk kedua-dua unit x87 (melalui fldcw) dan SSE (melalui ldmxcsr).
Penyelesaian Khusus MSVC:
Untuk Microsoft Visual C (MSVC), memanfaatkan fungsi _controlfp() bukan standard dan bukannya pemasangan pendekatan.
unsigned int originalRounding = _controlfp(0, 0); _controlfp(_RC_CHOP, _MCW_RC); // Perform calculations and rounding operations _controlfp(originalRounding, _MCW_RC);
Gelang Penyahkod Mod Pembundaran:
Untuk rujukan, berikut ialah cincin penyahkod untuk mod pembundaran berbeza dan makro C dan MSVC yang sepadan:
Rounding Mode | C Macro | MSVC Macro |
---|---|---|
Nearest | FE_TONEAREST | _RC_NEAR |
Towards Zero | FE_TOWARDZERO | _RC_CHOP |
Towards Infinity | FE_UPWARD | _RC_UP |
Towards -Infinity | FE_DOWNWARD | _RC_DOWN |
Teknik ini menyediakan cara yang cekap untuk mengawal mod pembundaran titik terapung, membolehkan pengiraan dan keputusan yang dioptimumkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanipulasi Mod Pembundaran Titik Terapung dengan Cekap dalam C dan Pemasangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!