Биты точности для чисел с плавающей запятой IEE 754 (32 бита) от -1 до 1

Учитывая диапазон представимых чисел с плавающей запятой, как я могу рассчитать количество бит точности, которое я смогу сохранить в 32-битном веществе с плавающей запятой IEE 754 в этом диапазоне.

Например, при выполнении математических вычислений, когда ожидается, что результат и рассматриваемые числа будут в диапазоне от -1 до 1 или, скажем, от 0 до 16, как я могу рассчитать, сколько теоретических битов точности существует в указанном диапазоне ?

Я понимаю, что значения не имеют равных интервалов и больше сконцентрированы вокруг 0, поэтому это усложняет вопрос. В конце концов, я хочу понять, какие значения не будут округляться и сколько значащих цифр я могу ожидать в пределах диапазона. Например, могу ли я рассчитывать сохранить (без округления) значение с точностью до 0,000001 в диапазоне от -1 до 1? Как мне это вычислить?


person Brett    schedule 15.06.2013    source источник
comment
Вы читали floating-point-gui.de?   -  person Carl Norum    schedule 15.06.2013


Ответы (1)


Вам не нужно много работать, чтобы придумать ответ. 32-битное число с плавающей запятой IEEE 754 имеет 23 бита мантиссы; подсчет первой единицы дает 24 значащих двоичных цифры (остерегайтесь денорм). Путем логарифмирования или поиска в В таблице в Википедии вы увидите, что это примерно 7,22 десятичных цифры.

Давайте возьмем этот факт и применим его к одному из ваших примеров. Все числа, которые вы хотите (те, которые имеют точность до 0,000001), поэтому могут быть представлены в диапазоне от -1 до 1 - все эти числа имеют 7 или меньше значащих цифр.

Что касается вашего другого вопроса о вычислении теоретических бит точности в диапазоне - он везде одинаков. Точность не связана с величиной - вы везде получаете одинаковое количество значащих цифр (опять же, обратите внимание на денорм). Как вы упомянули, представимые числа в абсолютном смысле становятся более разнесенными.

Если вам нужны числа без округления, вам нужно выбрать числа, которые могут быть представлены в точности как двоичная дробь, умноженная на степень двойки.

person Carl Norum    schedule 15.06.2013