非规格化的浮点数被检测为NaN。为什么?

时间:2012-02-28 07:54:17

标签: c floating-point nan

目前,我正在传输非规范化的浮点数= 0x00300000。在为另一个变量设置该值之前,进行不等式(var!= var)检查,即检查NaN。对于非规格化数字,不等式检查失败,并且该数字被检测为NaN。

你可以告诉我这里我做错了什么吗?我的代码在C中。

感谢。

1 个答案:

答案 0 :(得分:2)

我的系统上的等式检查似乎很好:

#include <stdio.h>
#include <string.h>

int main(void) {
    int i = 0x00300000;
    float f = 0;
    if (sizeof(f) != sizeof(i)) {
        printf ("Urk!\n");
        return 1;
    }
    memcpy (&f, &i, sizeof(f));
    printf ("%.50f\n", f);
    if (f == f)
        puts ("Equal");
    else
        puts ("Not equal");
    return 0;
}

输出:

0.00000000000000000000000000000000000000440810381558
Equal