Предположим, что число с плавающей запятой использует N битов памяти.
Теперь предположим, что это число с плавающей запятой может точно представлять все целые числа, которые могут быть представлены целочисленным типом из N битов.Поскольку N-битное целое число требует, чтобы все его N-биты представляли все его значения, так же было бы требованием для этого числа с плавающей запятой.
Число с плавающей запятой должно быть в состоянии представлять дробные числа.Однако, поскольку все биты используются для представления целых чисел, остаются нулевые биты для представления любого дробного числа.Это противоречие, и мы должны сделать вывод, что предположение о том, что float может точно представлять все целые числа, так как целочисленный тип одинакового размера, должно быть ошибочным.
Поскольку в диапазоне N-битных целых чисел должны быть не представимые целые числа, возможно, что преобразование такого целого числа в число с плавающей запятой из N битов потеряет точность, если преобразованное значение окажется одним из непредставляемых.
Теперь, поскольку плавающая точка можетпредставляют подмножество рациональных чисел, некоторые из этих представимых значений могут действительно быть целыми числами.В частности, спецификация IEEE-754 гарантирует, что двоичная с плавающей запятой двойной точности может представлять все целые числа вплоть до 2 53 .Это свойство напрямую связано с длиной мантиссы .
Поэтому невозможно потерять точность 32-битного целого числа при преобразовании в двойное число в системе, которая соответствует IEEE-754.
Технически, модуль с плавающей запятой в архитектуре x86 на самом деле использует 80-битный расширенный формат с плавающей запятой, который предназначен для точного представления всех 64-битных целых и может быть доступениспользуя тип long double
.