Чтобы обойти проблему с плавающей запятой ограниченной точности, вы также можете использовать метод Ньютона, чтобы найти в каждой итерации рациональное (a / b, с целыми числами a и b), которое является лучшим приближением к sqr (2).
Если x = a / b является значением, возвращенным из вашей последней итерации, то метод Ньютона утверждает, что новая оценка y = c / d равна:
y = x / 2 + 1 /x = a / 2b + b / a = (a ^ 2 + 2b ^ 2) (2ab)
так:
c = a ^ 2 + 2b ^ 2
d = 2ab
Точность удваивает каждую итерацию.Вы все еще ограничены в точности, которую можете достичь, потому что знаменатель и знаменатель быстро увеличиваются, но, возможно, найти реализацию больших целых чисел (или сочинить их самостоятельно) проще, чем найти реализацию с плавающей запятой произвольной точности.Кроме того, если вы действительно заинтересованы в десятичных дробях, то этот ответ вам не поможет.Это дает вам очень точную оценку sqr (2).
Всего несколько итераций a / b для алгоритма:
1/1, 3/2, 17/12, 577/ 408, 665857 / 470832.
665857/470832 приближает sqr (2) с ошибкой 1,59e-12.Ошибка останется порядка 1 / a ^ 2, поэтому реализация длинных a и b даст вам точность 1e-37 -ish.