Какова связь между цифрами значимости и потерей точности в числах с плавающей запятой? - PullRequest
5 голосов
/ 10 августа 2011

Итак, я пытался обернуть голову вокруг соотношения между числом значащих цифр в числе с плавающей запятой и относительной потерей точности, но я просто не могу понять, имеет ли это смысл.Ранее я читал статью, в которой говорилось, что нужно сделать следующее:

  1. Установите значение с плавающей запятой на значение 2147483647. Вы увидите, что его значение на самом деле равно 2147483648
  2. Вычтите 64 изfloat, и вы увидите, что операция правильная
  3. . Вычтите 65 из числа float, и вы увидите, что у вас теперь есть 2147483520, то есть фактически вычтено 128.

Так почемуэто 128, когда есть 10 значащих цифр?Я понимаю, как хранятся числа с плавающей запятой (1 бит для знака, 8 бит для экспоненты, 23 бита для мантиссы) и понимаю, как вы потеряете точность, если предположите, что все целые числа автоматически найдут точные дома в структуре данных с плавающей запятой, но я неЯ не понимаю, откуда взялись 128.Интуиция подсказывает мне, что я на правильном пути, но я надеюсь, что кто-то сможет прояснить это для меня.

Сначала я думал, что расстояние между возможными числами поплавков было 2 ^ (n-1) где n - количество значащих цифр, но это не так.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

Расстояние между двумя числами с плавающей запятой зависит от показателя степени.Чем меньше показатель степени, тем меньше разница между одним числом с плавающей точкой и следующим.Следующее, что нужно учитывать, это то, что показатель степени, хранящийся в числах с плавающей запятой, является двоичным показателем, а не десятичным показателем, поэтому в случае чисел с плавающей запятой десятичная точность менее важна, чем двоичная точность числа.Рисунок 9.1 из этого документа довольно хорошо объясняет концепцию.

3 голосов
/ 11 августа 2011

«Расстояние» между двумя соседними числами с плавающей запятой равно 2 ^ (1-n + e) ​​, где e - истинный показатель степени, а n количество битов в мантиссе (AKAсзначение). Сохраненный показатель не является истинным показателем, он имеет уклон. Для поплавков IEEE-754 это 127 (для нормализованных чисел). Итак, как сказал Питер О, расстояние зависит от показателя степени.

...