Денормализованный номер с плавающей точкой определяется как NaN.Зачем? - PullRequest
0 голосов
/ 28 февраля 2012

В настоящее время я передаю денормализованное число с плавающей запятой = 0x00300000.Прежде чем установить это значение для другой переменной, выполняется проверка неравенства (var! = Var), т.е. проверка на NaN.Проверка неравенства не выполняется для денормализованного числа, и число определяется как NaN.

Не могли бы вы сказать, что я делаю здесь неправильно?Мой код в C.

Спасибо.

1 Ответ

2 голосов
/ 28 февраля 2012

Проверка равенства в моей системе выглядит нормально:

#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
...