【发布时间】:2014-03-03 15:16:27
【问题描述】:
所以我尝试使用 Newton-Raphson 方法来求 BigInteger 的平方根。
这是我的代码:
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 不够精确,无法落在 while 循环中 epsilon 的准确度范围内 - 即它需要小数位。我的问题是什么/如何/在哪里转换为 double 以使 while 循环最终返回 false?
【问题讨论】:
-
嗯
BigInteger用于整数,而不是浮点数学。 -
那么我将如何对非常大的数字进行浮点数学运算?
-
使用
double数据类型,为了更准确,你可以使用decimal -
这里看最后三个答案(matheplanet.com/matheplanet/nuke/html/…),最后一个按位平方根真的是最快的。
标签: c# biginteger square-root newtons-method