Другие языки программирования и технологии
Откуда точность?
Странное дело, вроде как ещё год назад нам рассказали, что представляют из себя числа с плавающей точкой в памяти компьютера. И, главное, всё настолько складно и логично, что я просто принял это за истину и больше не задавался подобным вопросом. Но вот недавно опять переклинило. Вот пусть например тип double... его диапазон огромен и точность впечатляет. Но он занимает всего 4 байта, т.е. 4.2 с лишним миллиарда возможных состояний, не больше! Однако, если взять точность хотя бы до одной миллионной, то все эти 4 миллиарда состояний придётся угрохать в диапазон чисел от 0 до 4200+. Не фонтан. В тоже время, у double и точность выше и диапазон больше. И возникает вопрос: как распределены 4,2 миллиарда возможных состояний по диапазону типа doulbe? И какая же будет чудовищная погрешность на границах диапазона??? 0о
Как правильно уже заметили, double обычно занимает 8 байт. Это 64 бита. Весь фокус заключается в форме хранения, принципиально отличной от целых, так что твои подсчеты не подходят. А расположены эти числа так:
1 бит -знак мантиссы
11 бит - порядок в смещенном коде
52 бит - мантисса.
Поэтому диапазон представления огромен (из-за порядка) , а точность все таки будет ограничена примерно 16 разрядами в 10-ичном измерении.
1 бит -знак мантиссы
11 бит - порядок в смещенном коде
52 бит - мантисса.
Поэтому диапазон представления огромен (из-за порядка) , а точность все таки будет ограничена примерно 16 разрядами в 10-ичном измерении.
double занимает не 4, а 8 байт (точность около 16 цифр) , 4 занимает float (примерно 6 цифр) . Кстати, именно поэтому оно и называется double :)
Диапазон определяется, в основном разделением битов между порядком и мантиссой, а вот длина мантиссы и определяет точность.
Диапазон определяется, в основном разделением битов между порядком и мантиссой, а вот длина мантиссы и определяет точность.
Mclaren Mclaren
Вау) Я был уверен что double - 4 байта XD
Даже мыли задней не было что он должен чем-то отличаться от float :)))
Ну тогда к double вопросов нет)
Даже мыли задней не было что он должен чем-то отличаться от float :)))
Ну тогда к double вопросов нет)
Начни с того, что double это обычно 8 байт
Вообще всё зависит от языка программирования, способа представления чисел с плавающей точкой, компилятора. Например в языках С/С++ стандартом определено, что все производители компиляторов должны обеспечить для double диапазон значений 1E-37 до 1E+37,при этом на каждое число учитывалось не меньше 10 цифр после точки. Больше можно, меньше нельзя. А в Java всвязи с её кроссплатформенностью, размер установлен строго в 8 байт.
Вообще всё зависит от языка программирования, способа представления чисел с плавающей точкой, компилятора. Например в языках С/С++ стандартом определено, что все производители компиляторов должны обеспечить для double диапазон значений 1E-37 до 1E+37,при этом на каждое число учитывалось не меньше 10 цифр после точки. Больше можно, меньше нельзя. А в Java всвязи с её кроссплатформенностью, размер установлен строго в 8 байт.
все зависит от того сколько весит)
если бы он весил под 5-6кб.. . о_0
а он весит около 10-12 бит уже!!
если бы он весил под 5-6кб.. . о_0
а он весит около 10-12 бит уже!!
Похожие вопросы
- Вычисления с некоторой точностью
- Вопрос по информатике. Почему точность вычислений в С определяется только 16 знаком после запятой и почему именно 16?
- Delfi !!!Найдите корни уравнения ех – 10х = 0 с точностью эпсилам методом простой итерации.
- вычислить ряд 1/2+1/3+1/4... с точностью 0,1 в Турбо Паскаль. срочно, пожалуйста помогите!!!
- Перевести десятичное число 4843,845510 в новые системы счисления с основаниями 3, 5, 7 с точностью 0,001. Проверить прав
- Какова точность системного времени
- С++ вычисление с точностью
- Найти сумму числового ряда с заданной точность епсилон (вводится пользователем): S = 1+1/22+ 1/32+ 1/42+ 1/52+ …
- Откуда взялась легенда про матан в программировании?
- Откуда в программировании числа?
Но независимо от формы представления, количество вариантов (если говорить о float) в любом случае остаётся 4.2 млрд состояний, но диапазон float, гораздо шире. Вот и интересно, как же эти 4.2 млрд значений были распределены по диапазону float. Точность распределена примерно как нормальный закон что ли? Ближе к нулю - точнее. Чем больше числа, тем меньше точность...
Ведь если во float перемножить 5 000 000.0 * 5 000 000.0 мы получим ответ, хотя он вылетает за границы того же int. Но ведь погрешность чудовищная выходит! :(