C 库 - fesetround() 函数



C 的fenvfesetround() 函数设置算术运算(浮点数)的舍入模式。在将此函数应用于实际应用时,需要根据浮点数进行特定计算,例如银行/金融软件始终将值舍入为零(利息计算)。

语法

以下是 fesetround() 函数的 C 库语法。

int fesetround(int round);

参数

此函数仅接受一个参数,该参数为整数。以下是确定所需值(舍入)的参数列表:

  • FE_TONEAREST:此参数定义舍入到最接近的,即零。

  • FE_DOWNWARD:此参数定义将值舍入到负无穷大。

  • FE_UPWARD:此参数定义将值舍入到正无穷大。

  • FE_TOWARDZERO:此参数定义将值舍入到零。

返回值

  • 如果成功,此函数返回一个整数值(零)。如果参数不是受支持的舍入模式,则返回非零值。

示例 1

以下是一个基本的 C 库程序,将参数 FE_TONEAREST 设置为 fesetround() 函数以查看其演示。

#include <stdio.h>
#include <fenv.h>
#include <math.h>
int main() {
   double value = 9.5;
   double results[4];
   
   // Set rounding modes and perform calculations
   fesetround(FE_TONEAREST);
   results[0] = nearbyint(value);
   
   fesetround(FE_DOWNWARD);
   results[1] = nearbyint(value);
   
   fesetround(FE_UPWARD);
   results[2] = nearbyint(value);
   
   fesetround(FE_TOWARDZERO);
   results[3] = nearbyint(value);
   
   // Print results
   printf("Rounding FE_TONEAREST: %f\n", results[0]);
   printf("Rounding FE_DOWNWARD: %f\n", results[1]);
   printf("Rounding FE_UPWARD: %f\n", results[2]);
   printf("Rounding FE_TOWARDZERO: %f\n", results[3]);
   
   return 0;
}

输出

以上代码产生以下结果:

Rounding mode set to FE_TONEAREST successfully.

示例 2

下面的程序演示了每个参数,这些参数将舍入模式的值与单个计算进行比较。

#include <stdio.h>
#include <fenv.h>
#include <math.h>
int main() {
   double value = 9.5;
   double results[4];
   
   // Set rounding modes and perform calculations
   fesetround(FE_TONEAREST);
   results[0] = nearbyint(value);
   
   fesetround(FE_DOWNWARD);
   results[1] = nearbyint(value);
   
   fesetround(FE_UPWARD);
   results[2] = nearbyint(value);
   
   fesetround(FE_TOWARDZERO);
   results[3] = nearbyint(value);
   
   // Print results
   printf("Rounding FE_TONEAREST: %f\n", results[0]);
   printf("Rounding FE_DOWNWARD: %f\n", results[1]);
   printf("Rounding FE_UPWARD: %f\n", results[2]);
   printf("Rounding FE_TOWARDZERO: %f\n", results[3]);
   
   return 0;
}

输出

执行上述代码后,我们将获得以下结果:

Rounding FE_TONEAREST: 10.000000
Rounding FE_DOWNWARD: 9.000000
Rounding FE_UPWARD: 10.000000
Rounding FE_TOWARDZERO: 9.000000

示例 3

在此程序中,我们设置舍入模式(浮点数)以执行除法任务。

#include <stdio.h>
#include <fenv.h>

int main() {
   // Set rounding mode to upward
   fesetround(FE_UPWARD);
   
   // Perform a division
   double result = 10.0 / 3.0;
   printf("Result with FE_UPWARD: %f\n", result);
   
   return 0;
}

输出

执行上述代码后,我们将获得以下结果:

Result with FE_UPWARD: 3.333334
c_library_fenv_h.htm
广告