Рубрики

Назначение целого числа с плавающей точкой и сравнение в C / C ++

Рассмотрим приведенную ниже программу на C ++ и прогнозируем результат.

#include <iostream>

using namespace std;

  

int main()

{

    float f = 0xffffffff;

    unsigned int x = 0xffffffff; // Значение 4294967295

    if (f == x) 

        cout << "true";

    else 

        cout << "false";

    return 0;

}

Вывод вышеупомянутой программы ложен, если компилятор использует «32-битный тип с плавающей запятой IEEE754 ». Если мы определим:

float f = 0xffffffff;

Мы в основном пытаемся назначить 32-разрядное целое число (со знаком или без знака) для 32-разрядного числа с плавающей запятой. Компилятор сначала преобразует целое число 0xffffffff в ближайший 32-разрядный тип с плавающей запятой, и представление памяти с плавающей запятой f не совпадает с целым числом 0xffffffff. Мы можем видеть вышеупомянутые значения, печатая f и x.

#include <iostream>

using namespace std;

  

int main()

{

    float f = 0xffffffff;

    unsigned int x = 0xffffffff; 

    cout << "f = " << f << endl;

    cout << "x = " << x << endl;

    return 0;

}

Выход :

f = 4.29497e+09
x = 4294967295

Например, даже если мы копируем память напрямую, у нас есть целое число (значение равно 0xffffffff), и мы копируем содержимое (значения памяти). Поскольку 0xffffffff в IEEE754 не является допустимым числом с плавающей точкой, поэтому, если вы сравните это недопустимое представление с самим собой, оно не будет равно

unsigned int x = 0xffffffff;

memoryCopy(&f, &x, sizeof(x));

Эта статья предоставлена Ришав Радж . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Назначение целого числа с плавающей точкой и сравнение в C / C ++

0.00 (0%) 0 votes