Почему в Java разрешена произвольная точность в двойных литералах?

Я только что узнал из сообщения Питера Лоури , что это допустимое выражение, которое оценивается как true .

333333333333333.33d == 333333333333333.3d

У меня вопрос, почему разрешено иметь двойные литералы, которые не могут быть представлены в двойном формате, в то время как целочисленные литералы, которые не могут быть представлены, запрещены. Каково обоснование этого решения.


Замечание: я могу на самом деле вызвать ошибку компиляции вне допустимого диапазона для литералов типа double: -)

99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999d

Итак, пока мы находятся в диапазоне (min, max), литерал приближается, но при выходе за его пределы кажется, что компилятор отказывается аппроксимировать его.

6
задан Community 23 May 2017 в 12:26
поделиться