浮点加法向上舍入

时间:2011-12-05 10:01:57

标签: c++ floating-point rounding

我有一个浮点加法有点可能出错,因为这些值有不同的幅度,因此相当多的有效数字被移出(甚至可能全部移出)。在整个计算的范围内,精度不是那么相关,只是结果大于或等于任意精度的结果(我在这里跟踪一个范围的结束,并通过至少一定数量)。

因此,当将加数带到同一个指数时,我需要一个向上舍入的加法(即如果设置了一个数字移出一个数字,则加法应该用nextval(denormalized_summand, +infinity)进行。

是否有一种简单的方法可以执行此添加(手动对较小的加法进行非规范化并在其上使用nextval,但我怀疑这会有效吗?

1 个答案:

答案 0 :(得分:2)

您可以将FPU舍入模式设置为“向上”,然后只需正常添加。

这是在GNU环境中完成的:

#include <fenv.h>

fesetround(FE_UPWARD);

如果您有Microsoft编译器,则等效代码为:

#include <float.h>

_set_controlfp(_RC_UP, _MCW_RC);