Почему 8-ая десятичная цифра распознается в 16_711_711f == 16_711_712f, разве не должно быть с плавающей точкой точность только 7 десятичных цифр? - PullRequest
0 голосов
/ 23 мая 2018

float - 32 бита.Экспонента 8 бит.Следовательно, значение и равно 32-8 = 24 бита (минус знак бита плюс один неявный бит).

Если 24 бита используются для хранения значимых (двоичных) цифр, то только log10 (2 ^ 24) = 7 десятичных значащихцифры могут быть сохранены независимо от того, являются ли они десятичными цифрами (после точки) или цифрами целочисленной части.

Почему в примере ниже 8-й десятичной цифры распознается?Где ошибка в моих рассуждениях?

float f1 = 16_711_711;
float f2 = 16_711_712;

System.out.println(f1 == f2); // false

1 Ответ

0 голосов
/ 23 мая 2018

log10 (2 ^ 24) примерно равно 7.22.

Вы видите здесь .22.

Он может содержать 7 цифр и сможет хранить некоторую информацию овосемь, но не могу удержать все это.Вы случайно нашли пример, где достаточно информации, чтобы различить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...