Представление целых чисел в двухместных
Может ли двойной (заданного количества байтов с разумным балансом мантиссы / экспоненты) всегда полностью точно удерживать диапазон беззнакового целого числа в два раза меньше числа байтов?
Например, может ли восьмибайтовый двойной полностью точно удерживать диапазон чисел из четырех байтов без знака int?
То, к чему это приведет, – это если двухбайтовый float может содержать диапазон одного байта unsigned int.
- Произвольные точности в C #
- Настройка десятичной точности, .net
- Целые числа и точность поплавка
- Какова точность длинного двойника в C ++?
- Почему конверсия туда и обратно с помощью строки, небезопасной для двойной?
Однобайтный беззнаковый int, конечно, будет 0 -> 255.
- Безопасно ли проверять значения с плавающей запятой на равенство 0?
- Получить DateTime.Now с точностью до миллисекунды
- Как измерить время в миллисекундах с использованием ANSI C?
- Точность C # DateTime.Now
- Равновесие и допуски с плавающей точкой
- Точность десятичного деления T-SQL
- Какая стандартная (или самая лучшая) библиотека большого числа (произвольная точность) для Lua?
- Точность с плавающей запятой C ++
64-битный двоичный код IEEE754 может представлять любое 32-битное целое число, просто потому, что он имеет 53-разрядные биты, доступные для точности, и требуется только 32-битное целое число, ну, 32 🙂
Было бы правдоподобно, если бы 64-битное число с плавающей запятой (без IEEE754 с двойной точностью) имело менее 32 бит точности. Это позволило бы действительно огромные числа (из-за экспоненты), но ценой точности.
Суть в том, что при условии, что в мантиссе числа с плавающей запятой больше битов точности, чем в целочисленном (и достаточном количестве бит в экспоненте для ее масштабирования), тогда ее можно представить без потери точности.
Да. Поплавок (или двойной) гарантированно точно представляет любое целое число, которое не нужно усекать. Для двойника существует 53 бит точности, поэтому этого более чем достаточно, чтобы точно представлять любое 32-битное целое число и крошечную (статистически выраженную) долю 64-битных.
Точно, что диапазон, который вы можете представлять, точно зависит от множества факторов в вашей реализации, но вы можете ограничить его, указав, что если для поля экспоненты установлено значение 0, вы можете точно представлять целые числа до ширины ваше поле мантиссы (при знаке бит). Для двойной точности IEEE 754 это означает, что вы можете точно представлять 52-разрядные номера. В общем, ваша мантисса будет на половину ширины общей структуры.
Для более подробной информации о том, как работает двойник, вы можете посмотреть это сообщение в блоге: Анатомия числа с плавающей запятой .
Я не буду использовать слова «полностью точно», когда речь идет о числах с плавающей запятой. Но да, double
может представлять 32-битное целое число.
Я не знаю, какие другие комбинации float и ints это тоже верно.
Практически говоря, вы не хотите беспокоиться о том, чтобы использовать плавающие точки выше того, что поддерживает ваша машина, поэтому просто переключитесь на рациональную арифметику с bignums. Таким образом, вам гарантирована точность.