Что считается правильным результатом IEEE-754 при вычислении этого квадратного корня?

У меня есть алгоритм квадратного корня Ньютона-Рафсона, который я использую, который вычисляет квадратный корень с одинарной точностью входного значения. Однако, используя тестовый стенд, который я ввел, я обнаружил, что некоторые входные значения не сходятся к ответу, который ближе всего к фактическому квадратному корню. Когда я говорю фактический квадратный корень, я имею в виду результат, который вы получите с большей точностью, чем 32-битный IEEE-754.
В результате мне было интересно, что считается правильным значением, которое будет получено при выполнении квадратного корня в IEEE-754. Некоторые люди на этом форуме говорили мне, что самая близкая ценность не обязательно самая правильная, поэтому я спрашиваю.

При вычислении квадратного корня 32-разрядного значения 0x3f7fffff IEEE-754 одинарной точности, что считается правильным результатом и почему?

Кроме того, что считается правильным результатом при вычислении квадратного корня из 0x7F7FFFFF?

1

Решение

0x3f7fffff является 1.0 - u, где u = 2**-24, Серия Тейлор для sqrt(1 + x) является:

sqrt(1 + x) = 1 + x/2 - x^2/8 + O(x^3)

Если мы подключим -u в течение x, мы получаем:

sqrt(1 - u) = 1 - u/2 - u^2/8 - O(u^3)

Значение 1 - u/2 является точной точкой на полпути между двумя ближайшими представимыми числами с плавающей точкой, 1-u а также 1; поскольку следующий член в ряду Тейлора отрицателен, значение sqrt(1 - u) чуть-чуть меньше, и поэтому результат округляется до 1 - u,

0x7f7fffff просто 2**128*(1-u)так математически точный квадратный корень 2**64*(1 - u/2 - u^2/8 - ...), который округляется до 2**64 * (1-u), как описано выше.

6

Другие решения

Других решений пока нет …