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

Floating point equation checking ansi c - isnormal()

我正在尝试检查我在 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);

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

零不正常,因此您不应使用 isnormal 作为对可能为零的结果的健全性检查。

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

FPU 异常可能会更好地为您服务:每个可能的事件都有一个,您可能想知道它是否发生在您启动计算后,并且使用它们的方法在 this existing answer.