Почему select (1.9999999999999999+2)/2 = (1.9999999999999999999999999999999999+2)/2
равно true
в postgres? Выполнение select pg_typeof((1.9999999999999999999999999999999999+2)/2)
показывает тип numeric
, который, как утверждают документы, являются точными числами, должен поддерживать тысячи цифр после десятичной дроби.
select 1.9999999999999999 = 1.9999999999999999999999999999999999
возвращает false
, как и ожидалось.
Почему выбрать (1.999999999999999+2)/2
показать 1.9999999999999995
, как я ожидал, но добавив дополнительный «9» в конце показывает 2.0000000000000000
? Разве дополнительный di git не должен увеличивать точность, и я должен также видеть дополнительный «9» в результате?
В каких случаях я могу быть уверен, что не увижу это в своих запросах при выполнении арифметика c на numeric
типах?