Существует ли IEEE double x>0
такой, что sqrt(x*x) ≠ x
при условии, что вычисление x*x
не переполняется или не проходит до Inf
, 0
или денормального числа?
Это означает, что sqrt
возвращает ближайший представимый результат, и поэтому x*x
(оба, как указано в стандарте IEEE, "операция с квадратным корнем вычисляется как бесконечная точность, а затем округляется до одной из два ближайших числа с плавающей запятой заданной точности, которые окружают бесконечно точный результат" ).
В предположении, что если такие двойники будут существовать, то, вероятно, есть примеры, близкие к 1, я написал программу для поиска этих контрпримеров и не смог найти между 1.0
и 1.0000004780981346
.
Предыдущий аналогичный вопрос совершенные квадраты и числа с плавающей запятой отвечает на вопрос отрицательным для ситуаций, когда вычисление x*x
не предполагает округления. Этот ответ недостаточен для этого вопроса, потому что возможно x*x
включать округление в одном направлении, затем sqrt(x*x)
включать округление в одном направлении, создавая таким образом ответ, который не является точно x
.