2014-02-06 9 views
0

Итак, я пытаюсь использовать метод Ньютона-Рафсона, чтобы найти квадратный корень BigInteger.Как использовать метод Ньютона-Рафсона для поиска квадратного корня BigInteger в C#

Вот мой код:

  private void sqrRt(BigInteger candidate) 
      { 
       BigInteger epsilon = new BigInteger(0.0001); 
       BigInteger guess = candidate/2; 

       while (BigInteger.Abs(guess * guess - candidate) >= epsilon) 
       { 
        // guess = guess - (((guess**2) - y)/(2*guess)) 
        guess = BigInteger.Subtract(guess, BigInteger.Divide(BigInteger.Subtract(BigInteger.Multiply(guess, guess), candidate), BigInteger.Multiply(2, guess))); 
        MessageBox.Show(Convert.ToString(guess)); 
       } 
      } 

Проблема, кажется, что BigInteger не является достаточно точной, чтобы подпадать степень точности эпсилона в то время цикла - то есть он должен десятичное место. Мой вопрос в том, что/как/где я конвертирую в double, чтобы цикл while в конечном итоге возвращал false?

+1

ummm a BigInteger - это целые числа, а не математика с плавающей запятой. –

+0

Возможный дубликат [Вычислить квадратный корень из BigInteger (System.Numerics.BigInteger)] (http://stackoverflow.com/questions/3432412/calculate-square-root-of-a-biginteger-system-numerics-biginteger) – AlexH

+0

Итак, как бы я сделал математику с плавающей запятой на очень больших количествах? – Gerald

ответ

1

Вы используете неправильный тип данных. Чтобы иметь десятичные точки, вам нужно будет использовать double, float, decimal или Complex.

Проверьте ссылки всех этих типов, чтобы вы могли видеть их цифры точности.