C 库 - fesetround() 函数

❮ C 标准库 - <fenv.h>


C fenv 库中的 fesetround() 函数用于设置算术运算(浮点型)的舍入模式。在实际应用中,此函数需要基于浮点数的特定计算,例如银行/金融软件,总是将值向零舍入(利息计算)。

语法

以下是 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];
   
   // 设置舍入模式并执行计算
   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);
   
   // 打印结果
   printf("Rounding FE_TONEAREST: %f", results[0]);
   printf("Rounding FE_DOWNWARD: %f", results[1]);
   printf("Rounding FE_UPWARD: %f", results[2]);
   printf("Rounding FE_TOWARDZERO: %f", 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];
   
   // 设置舍入模式并执行计算
   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);
   
   // 打印结果
   printf("Rounding FE_TONEAREST: %f", results[0]);
   printf("Rounding FE_DOWNWARD: %f", results[1]);
   printf("Rounding FE_UPWARD: %f", results[2]);
   printf("Rounding FE_TOWARDZERO: %f", 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() {
    // 将舍入模式设置为向上
    fesetround(FE_UPWARD);
    
    // 执行除法
   double result = 10.0 / 3.0;
   printf("Result with FE_UPWARD: %f", result);
   
   return 0;
}

输出

执行上述代码后,我们得到以下结果 -

Result with FE_UPWARD: 3.333334

❮ C 标准库 - <fenv.h>