Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

fesetround() và fegetround() - kiểm soát làm tròn số thực trong C++


Thư viện <cfenv> cung cấp kiểm soát chế độ làm tròn số thực cho các hàm như rint(), nearbyint().

fesetround(int round)

Thiết lập chế độ làm tròn. Các macro:

  • FE_TONEAREST: làm tròn đến gần nhất (mặc định).
  • FE_DOWNWARD: làm tròn xuống (-∞).
  • FE_UPWARD: làm tròn lên (+∞).
  • FE_TOWARDZERO: làm tròn về 0 (cắt phần thập phân).

fegetround()

Trả về macro tương ứng với chế độ hiện tại.

Ví dụ

#include <cfenv> #include <cmath> #include <iostream>
using namespace std;

void print_mode() {
    switch (fegetround()) {
        case FE_TONEAREST:  cout << "FE_TONEAREST"; break;
        case FE_DOWNWARD:   cout << "FE_DOWNWARD"; break;
        case FE_UPWARD:     cout << "FE_UPWARD"; break;
        case FE_TOWARDZERO: cout << "FE_TOWARDZERO"; break;
        default:            cout << "unknown";
    }
    cout << endl;
}

int main() {
    double x = 4.7, ans;
    fesetround(FE_TONEAREST);  ans = rint(x); cout << ans; print_mode(); // 5
    fesetround(FE_TOWARDZERO); ans = rint(x); cout << ans; print_mode(); // 4
    fesetround(FE_DOWNWARD);   ans = rint(x); cout << ans; print_mode(); // 4
    fesetround(FE_UPWARD);     ans = rint(x); cout << ans; print_mode(); // 5
}

Kết quả

5 FE_TONEAREST
4 FE_TOWARDZERO
4 FE_DOWNWARD
5 FE_UPWARD