Я верю этому результату, но все же нахожу его чрезвычайно удивительным.
твует ли двойной стандарт IEEE?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
.