Каковы риски разбора числовых строк в числа с плавающей точкой?
Отображение бесконечного в конечное
Обычные типы с плавающей запятой имеют конечный членустановить / размер.Скажем, float
занял 32-битный.Это приводит к примерно 2 32 различным float
значениям. строка имеет неограниченные комбинации.Что-то должно дать, независимо от того, закодирована ли цель float
с использованием бинарных, десятичных или каменных ножей и шкур медведя 1: 40 .
Риск: Предполагается, что все значения могут быть закодированы.
Десятичное в двоичное
Типичное с плавающей запятой использует двоичное обозначение / дробь, в то время как строка часто пишется с использованием десятичных цифр.
"1.234"
не имеет точного эквивалентного значения как float
.Вместо этого разбор дает около 1040 *.float
само по себе является точным , но не таким же точным значением, как 1,234.
Риск: если предположить, что преобразование было точным эквивалентом.
Диапазон
Даже если допускается неточность, float
имеет диапазон, например +/- 10 38 , +/- 10 308 илиподобное, аналогичное, похожее.10000!не проверяется, чтобы быть представимым.
Значение может также стать настолько малым, прежде чем они будут преобразованы в 0.0.
Риск: переполнение / недостаточность.
реальная опасность - это непонимание того, как с плавающей запятой отличается в различных случаях от реальная математика и как справиться.С их помощью тонкости могут привести к бесконечным циклам, потерям денег, сбою кода или несоответствиям между платформами.
В math есть real number_line .С float
линия "пунктирная". Увеличено в примере Пример 2