Вопрос

Может ли двойное число (заданного количества байтов с разумным балансом мантиссы/экспоненты) всегда полностью точно удерживать диапазон беззнакового целого числа, составляющий половину этого количества байтов?

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

Это сводится к тому, что двухбайтовое число с плавающей запятой может содержать диапазон однобайтового беззнакового целого числа.

Однобайтовое беззнаковое целое число, конечно, будет 0 -> 255.

Это было полезно?

Решение

64-битное двойное число IEEE754 может представлять любое 32-битное целое число просто потому, что оно имеет 53-нечетное число.(а) биты доступны для точности, а для 32-битного целого числа требуется только 32 :-)

Было бы вполне правдоподобно, чтобы 64-битное число с плавающей запятой (не IEEE754 двойной точности) имело точность менее 32 бит.Это позволило бы получить действительно огромные числа (из-за показателя степени), но за счет точности.

Суть в том, что при условии, что в мантиссе числа с плавающей запятой больше бит точности, чем в целом числе (и достаточно битов в экспоненте для его масштабирования), тогда его можно представить без потери точности.


(а) Технически, 53-й бит точности является подразумеваемым. 1 в начале последовательности, поэтому размер «вариативности» может составлять всего 52 бита.Будь то 52 или 53, битов все равно достаточно для представления каждого 32-битного целого числа.

Другие советы

Да.Число с плавающей запятой (или двойное число) гарантированно точно представляет любое целое число, которое не нужно усекать.Для двойного числа существует 53 бита точности, так что этого более чем достаточно, чтобы точно представить любое 32-битное целое число, а также небольшую (статистически говоря) долю 64-битных чисел.

То, какой именно диапазон вы можете представить, зависит от множества факторов в вашей реализации, но вы можете ограничить его снизу, сказав, что, если поле экспоненты установлено в 0, вы можете точно представлять целые числа до ширины ваше поле мантиссы (при условии знакового бита).Для двойной точности IEEE 754 это означает, что вы можете точно представлять 52-битные числа.В общем, ваша мантисса будет составлять более половины ширины всей конструкции.

Для получения более подробной информации о том, как работает двойник, вы можете посмотреть этот пост в блоге: Анатомия числа с плавающей запятой.

Я бы не стал использовать слова «полностью точно», когда речь идет о числах с плавающей запятой.Но да, double может представлять собой 32-битное целое число.

Я не знаю, для каких еще комбинаций чисел с плавающей запятой и целых чисел это также верно.

Фактически, вы не хотите использовать числа с плавающей запятой выше того, что поддерживает ваша машина, поэтому просто переключитесь на рациональную арифметику с большими числами.Таким образом, вам гарантирована точность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top