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

相关文章