Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что мешает плавающему числу иметь максимальную точность?

ФермаКактусов Высший разум (213534), открыт 1 неделю назад
7 ответов
Папа Высший разум (149601) 1 неделю назад
Очевидно же. Вещественные числа с плавающей точкой хранятся в двоичном виде. Конечная десятичная дробь 5.4 является бесконечной периодической дробью в двоичной системе: 0.4 = 2/5, и 5 не делит основание системы счисления. Аналогично и с 8.9: 0.9 = 9/10.
Поэтому в последнем двоичном знаке мантиссы её придётся округлить. Отсюда и артефакты при печати в десятичном виде (0000000004, 9999999995 и т.п.).
А 0.5=1/2 имеет конечное представление и помещается в число с плавающей точкой без потерь, как и 0.25, 0.125, 0.0625 и т.д.
Чтобы не было потери точности, используется двоично-десятичный формат, хранящий все десятичные цифры (в пределах своей точности, конечно). Кстати, по исследованиям IBM 2003 года подавляющее большинство числовых данных в корпоративных БД хранится именно в нём.
ФермаКактусовВысший разум (213534) 1 неделю назад
представление чисел хранится аппаратно?
Папа Высший разум (149601) ФермаКактусов, ну, любые хранимые данные хранятся аппаратно, т.е. в на неких материальных носителях. А если речь о том, как распознать формат хранения, то он либо указывается в метаданных (например, структура таблицы БД), либо зашит в логике приложения (если это какие-то проприетарные бинарные файлы).
Алекс Куха Высший разум (472201) 1 неделю назад
Только после того, как тс скажет, что он понимает под "максимальной точностью"

Как раз в Пайтоне легко оперировать с любой мантиссой, которая помещается в доступную память задачи

Ведь жили же без тебя
ФермаКактусовВысший разум (213534) 1 неделю назад
максимальная точность когда число 0.0000000000000000004 равно именно 0.0000000000000000004 а не 0.000000000000000000399 или 0.00000000000000000049234
Алекс Куха Высший разум (472201) ФермаКактусов, 19 знаков мантиссы? пффф. Да легко
ПапаВысший разум (149601) 1 неделю назад
Питоновский float точно так же ограничен и теряет знаки, как в других языках. Кишка у них тонка сделать бесконечный float.
1 литр энеоавлдввлталчлвлы Гуру (4335) 1 неделю назад
Проблема с плавающими числами и их максимальной точностью вызывает несколько факторов:
- Представление в двоичной системе: Плавающие числа обычно представляются в двоичной системе, что может привести к потере точности. Некоторые десятичные дроби не могут быть точно выражены в двоичной системе, что приводит к округлению.
- Ограниченная длина: Компьютеры имеют фиксированное количество бит для представления чисел с плавающей точкой (например, 32 бита для float и 64 бита для double). Это ограничение означает, что числа слишком великой или слишком малой величины могут быть представлены лишь приближенно.
- Кругление: Операции с числами с плавающей точкой могут приводить к круглению результатов. Например, при сложении или вычитании чисел с низкой и высокой точностью, высокая точность может быть утеряна.
- Ошибки накопления: При последовательном выполнении математических операций ошибки округления могут накапливаться, что приводит к более значительным отклонениям от ожидаемого результата.
В результате все эти факторы делают невозможным достижение "максимальной" точности чисел с плавающей запятой в большинстве языков программирования, включая Python.
Терр Онтал Мудрец (13582) 1 неделю назад
В COBOL такой проблемы нет. Think about it
Алекс КухаВысший разум (472201) 1 неделю назад
В Коболе есть другие проблемы
Терр Онтал Мудрец (13582) Алекс Куха, никаких проблем нет.
Moon Late Мастер (1331) 1 неделю назад
Если есть бесконечное число байтов для хранения числа, то оно бесконечно точным.
ПапаВысший разум (149601) 1 неделю назад
Почитай обсуждения индусов на leetcode и поймёшь, что это не так. Настоящий рукожоп даже с бесконечной точностью будет терять знаки.
Сергей Иванов Оракул (50380) 1 неделю назад
Если нужна точность большая, чем может уместить переменная определённого типа, можно хранить число в строке и парсить эту строку для выполнения любых операций с этим числом
Похожие вопросы