我试图在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);
答案 0 :(得分:2)
您对isnormal
的使用看起来不像任何惯用语。我不确定你对这种方式使用isnormal
的期望是什么(对5.0*10.3
来说显然是正确的,我希望编译器能够优化它),但这里至少有一些明显的问题假设您将其用于其他计算:
零是不正常的,所以你不应该使用isnormal
作为一个健全性检查,以获得可以为零的结果。
isnormal
不会告诉您计算是否接近于零而失去精度(低于正常范围)并稍后又回到正常范围。
FPU例外情况可能会更好:每个可能的事件都有一个,你可能想知道它是否在你启动计算后发生了,并且在this existing answer中概述了使用它们的方法。