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