我有一个浮点加法有点可能出错,因为这些值有不同的幅度,因此相当多的有效数字被移出(甚至可能全部移出)。在整个计算的范围内,精度不是那么相关,只是结果大于或等于任意精度的结果(我在这里跟踪一个范围的结束,并通过至少一定数量)。
因此,当将加数带到同一个指数时,我需要一个向上舍入的加法(即如果设置了一个数字移出一个数字,则加法应该用nextval(denormalized_summand, +infinity)
进行。
是否有一种简单的方法可以执行此添加(手动对较小的加法进行非规范化并在其上使用nextval
,但我怀疑这会有效吗?
答案 0 :(得分:2)
您可以将FPU舍入模式设置为“向上”,然后只需正常添加。
这是在GNU环境中完成的:
#include <fenv.h>
fesetround(FE_UPWARD);
如果您有Microsoft编译器,则等效代码为:
#include <float.h>
_set_controlfp(_RC_UP, _MCW_RC);