Какова взаимосвязь между значимыми цифрами и потерей точности в числах с плавающей запятой?

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

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

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

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

Спасибо!

5
задан MoarCodePlz 10 August 2011 в 04:17
поделиться