| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > диапазон целых чисел в double без потери точности |
| Автор: leniviy 25.9.2012, 12:02 | ||||
| Подскажите непрерывный диапазон целых чисел, которые можно хранить в переменной типа double без потери точности. Это точно не DBL_MIN..DBL_MAX
|
| Автор: Alexeis 25.9.2012, 12:16 |
| -/+ 4 503 599 627 370 496 __int64 может больше. |
| Автор: tzirechnoy 26.9.2012, 11:23 |
| Да, примерно +-2^[число бит мантиссы-1], кстати. На будущее. |
| Автор: Alexeis 26.9.2012, 14:00 |
| А почему -1 ? В числах с плавающей точкой знак хранится отдельно. |
| Автор: math64 27.9.2012, 08:27 | ||
Мантисса позволяет хранить целые от 0 до 2^n-1, но за счёт экспоненты double может хранить и 2^n. За счёт того, что знак хранится отдельно, диапазон симметричен -2^n ... 2^n |
| Автор: tzirechnoy 27.9.2012, 18:32 | ||
Ну, по факту -- если там один бит, то только 0, +1, -1. 2 ужэ от 3 не отличить. То есть +-2^0. PS Да, я в биты включал и неявный, если он есть. В IEEE 754 double -- есть (малые числа не рассматриваем за нерелевантностью), т.е. 53 бита мантиссы записываются в 52 бита в памяти. |
| Автор: math64 28.9.2012, 10:13 | ||
8 тоже записывается в виде 100(2)*10(2)^1 А 9 уже нет, при выолнении 8+1 можно получить 8 или 10 (в зависимости от правил округления) Поэтому при 3 битах мантиссы (1 из них может быть скрытым) диапазон будет -8...8, т. е. -2^n...2^n без всяких -1 |
| Автор: tzirechnoy 28.9.2012, 14:11 | ||
(хар)0xy == (хар-1)xy0. Так что выкидываем как дубли 001, 010, 011 (000 -- симметричен и не дублируется). То есть остаётся +-4. Доказывать -- лень (оставляю это для самостоятельной тренировки Добавлено через 1 минуту и 36 секунд А можэт, и не выкидываем. Чёрт, думать надо. Но по-моему выкидываем. Вечером подумаю. |