Подтвердить что ты не робот

Представление целых чисел в двухлокальных

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

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

То, что это сработает, - это если двухбайтовый float может содержать диапазон одного байта unsigned int.

Один байтовый беззнаковый int, конечно, будет 0 → 255.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 5

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

Я не знаю, какие другие комбинации float и ints это также верно для.

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