Как мне заставить Math.Sqrt вернуть Bignum, а не Float? - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь вычислить квадратный корень из действительно большого числа в Ruby.У меня проблема в том, что функция Math.sqrt выглядит следующим образом:

sqrt(numeric) → float

Если я передам ей действительно большое число, это даст мне FloatDomainError: Infinity.

Каков наилучший способ получить sqrt(), чтобы вернуть BigNum?Возможно, для этого есть драгоценный камень или мне придется написать собственную функцию для вычисления квадратного корня?

В таком случае, как проще всего это сделать?Серия Тейлор?Квадратные корни чисел будут всегда целыми числами.

1 Ответ

5 голосов
/ 22 ноября 2011

Существует простой способ вычислить квадратный корень из целого числа, в результате чего получается целое число:

  1. Чтобы найти квадратный корень из числа, установите M и P для этого числа.
  2. Затем вычислите (M + P / M) / 2, округляя каждое деление вниз.
  3. Если M равно или меньше результата, используйте M в качестве квадратного корня;в противном случае установите M в качестве результата и повторите этот процесс на шаге 2.

Однако этот подход может быть неэффективным для больших чисел, поэтому попробуйте его и посмотрите.1013 *

Вот реализация Ruby:

def mysqrt(x)
  return 0 if x==0 
  m=x
  p=x
  loop do
    r=(m+p/m)/2
    return m if m<=r
    m=r
  end
end
...