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

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

ФермаКактусов Высший разум (214169), закрыт 3 недели назад
Лучший ответ
Папа Высший разум (152265) 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 года подавляющее большинство числовых данных в корпоративных БД хранится именно в нём.
ФермаКактусовВысший разум (214169) 1 месяц назад
представление чисел хранится аппаратно?
Папа Высший разум (152265) ФермаКактусов, ну, любые хранимые данные хранятся аппаратно, т.е. в на неких материальных носителях. А если речь о том, как распознать формат хранения, то он либо указывается в метаданных (например, структура таблицы БД), либо зашит в логике приложения (если это какие-то проприетарные бинарные файлы).
Остальные ответы
Алекс Куха Высший разум (474576) 1 месяц назад
Только после того, как тс скажет, что он понимает под "максимальной точностью"

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

Ведь жили же без тебя
ФермаКактусовВысший разум (214169) 1 месяц назад
максимальная точность когда число 0.0000000000000000004 равно именно 0.0000000000000000004 а не 0.000000000000000000399 или 0.00000000000000000049234
Алекс Куха Высший разум (474576) ФермаКактусов, 19 знаков мантиссы? пффф. Да легко
ПапаВысший разум (152265) 1 месяц назад
Питоновский float точно так же ограничен и теряет знаки, как в других языках. Кишка у них тонка сделать бесконечный float.
1 литр энеоавлдввлталчлвлы Гуру (4598) 1 месяц назад
Проблема с плавающими числами и их максимальной точностью вызывает несколько факторов:
- Представление в двоичной системе: Плавающие числа обычно представляются в двоичной системе, что может привести к потере точности. Некоторые десятичные дроби не могут быть точно выражены в двоичной системе, что приводит к округлению.
- Ограниченная длина: Компьютеры имеют фиксированное количество бит для представления чисел с плавающей точкой (например, 32 бита для float и 64 бита для double). Это ограничение означает, что числа слишком великой или слишком малой величины могут быть представлены лишь приближенно.
- Кругление: Операции с числами с плавающей точкой могут приводить к круглению результатов. Например, при сложении или вычитании чисел с низкой и высокой точностью, высокая точность может быть утеряна.
- Ошибки накопления: При последовательном выполнении математических операций ошибки округления могут накапливаться, что приводит к более значительным отклонениям от ожидаемого результата.
В результате все эти факторы делают невозможным достижение "максимальной" точности чисел с плавающей запятой в большинстве языков программирования, включая Python.
Терр Онтал Мудрец (14114) 1 месяц назад
В COBOL такой проблемы нет. Think about it
Алекс КухаВысший разум (474576) 1 месяц назад
В Коболе есть другие проблемы
Терр Онтал Мудрец (14114) Алекс Куха, никаких проблем нет.
Moon Late Гуру (3191) 1 месяц назад
Если есть бесконечное число байтов для хранения числа, то оно бесконечно точным.
ПапаВысший разум (152265) 1 месяц назад
Почитай обсуждения индусов на leetcode и поймёшь, что это не так. Настоящий рукожоп даже с бесконечной точностью будет терять знаки.
Сергей Иванов Оракул (50996) 1 месяц назад
Если нужна точность большая, чем может уместить переменная определённого типа, можно хранить число в строке и парсить эту строку для выполнения любых операций с этим числом
ХРАЗ (хранитель знаний) Профи (583) 1 месяц назад
Представление чисел с плавающей точкой в Python ограничено возможностями стандарта IEEE 754, который определяет, как компьютеры хранят и обрабатывают такие числа. Проблема заключается в том, что многие десятичные дроби, такие как 0.1, не могут быть представлены точно в двоичной системе, что приводит к небольшим ошибкам округления. Эти ошибки накапливаются при выполнении арифметических операций, и в результате мы видим небольшие отклонения от ожидаемых значений. Хотя Python использует формат с двойной точностью, который позволяет достичь высокой степени точности, абсолютная точность всё же недостижима из-за фундаментальных ограничений компьютерной арифметики.
Похожие вопросы