C++ 中的 Fesetround() 和 fegetround()
c++server side programmingprogramming更新于 2025/3/9 14:52:17
这里我们将看到 C++ 中的 fesetround() 和 fegetround() 方法。这些方法可以在 cfenv 库中找到。
fesetround() 方法用于将指定的浮点舍入方向设置为当前舍入方向。它与 C++ 中的 rint()、nearbyint() 和其他一些舍入函数一起使用。
语法如下 −
int fesetround(int round);
舍入可以是 FE_TONEAREST、FE_DOWNWARD、FE_UPWARD 等。当舍入方向成功应用于所需方式时,此函数返回 0。
示例
#include <cfenv > #include <cmath> #include <iostream> using namespace std; main() { double x = 4.7, ans; fesetround(FE_TONEAREST); //四舍五入为最接近的整数 ans = rint(x); cout << "最接近的整数是: " << ans << endl; fesetround(FE_TOWARDZERO); //向零舍入 ans = rint(x); cout << "向 0 舍入,值为: " << ans << endl; fesetround(FE_DOWNWARD); //向下舍入 ans = rint(x); cout << "数字下方最近的整数:" << ans << endl; fesetround(FE_UPWARD); //向上舍入 ans = rint(x); cout << "数字上方最近的整数:" << ans << endl; }
输出
最接近的整数是:5 向 0 舍入,值为:4 数字下方最接近的整数:4 数字上方最接近的整数:5
现在让我们看看 fegetround() 方法用于获取与当前舍入方向相对应的浮点舍入宏。此函数与 C++ 中的 rint()、nearbyint() 和其他一些舍入方法一起使用。
语法如下 −
int fegetround();
这将返回与浮点舍入宏相对应的数字。
- FE_DOWNWARD
- FE_TONEAREST
- FE_TOWARDZERO
- FE_UPWARD
示例
#include <cfenv > #include <cmath> #include <iostream> using namespace std; void float_direction() { 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; } main() { double x = 4.7, ans; fesetround(FE_TONEAREST); //四舍五入到最接近的整数 ans = rint(x); cout << "最接近的整数是: " << ans << endl; float_direction(); fesetround(FE_TOWARDZERO); //向零舍入 ans = rint(x); cout << "向 0 舍入,值为: " << ans << endl; float_direction(); fesetround(FE_DOWNWARD); //向下舍入 ans = rint(x); cout << "数字下方最近的整数:" << ans << endl; float_direction(); fesetround(FE_UPWARD); //向上舍入 ans = rint(x); cout << "数字上方最近的整数:" << ans << endl; float_direction(); }
输出
最接近的整数是:5 宏是:FE_TONEAREST 向 0 舍入,值为:4 宏是:FE_TOWARDZERO 数字下方最接近的整数:4 宏是:FE_DOWNWARD 数字上方最接近的整数:5 宏是:FE_UPWARD