C 库 - fesetround() 函数
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