浮点方程检查ansi c - isnormal()

时间:2015-12-08 22:40:55

标签: c error-handling floating-point c99

我试图在c99中检查我的浮点运算。

我应该在isnormal()中进行所有操作吗?这段代码有意义吗?

double dTest1 = 0.0;
double dTest2 = 0.0;
double dOutput = 0.0;

dTest1 = 5.0;
dTest2 = 10.3;
dOutput = dTest1 * dTest2;

//add some logic based on output
isnormal(dOutput);

1 个答案:

答案 0 :(得分:2)

您对isnormal的使用看起来不像任何惯用语。我不确定你对这种方式使用isnormal的期望是什么(对5.0*10.3来说显然是正确的,我希望编译器能够优化它),但这里至少有一些明显的问题假设您将其用于其他计算:

零是不正常的,所以你不应该使用isnormal作为一个健全性检查,以获得可以为零的结果。

isnormal不会告诉您计算是否接近于零而失去精度(低于正常范围)并稍后又回到正常范围。

FPU例外情况可能会更好:每个可能的事件都有一个,你可能想知道它是否在你启动计算后发生了,并且在this existing answer中概述了使用它们的方法。