【发布时间】:2012-01-20 06:44:31
【问题描述】:
我试图通过使用牛顿方法来完成这项工作,如下所述:wiki 使用以下代码,但问题是它只能给出精确到小数点后 16 位的结果。我试图增加迭代次数,结果还是一样。我从 1 的初始猜测开始。那么我怎样才能提高答案的准确性(最多 100 位或更多小数位)? 谢谢。 代码:
double x0,x1;
#define n 2
double f(double x0)
{
return ((x0*x0)-n);
}
double firstDerv(double x0)
{
return 2.0*x0;
}
int main()
{
x0 = n/2.0;
int i;
for(i=0;i<40000;i++)
{
x1=x0-(f(x0)/((firstDerv(x0))));
x0=x1;
}
printf("%.100lf\n",x1);
return 0;
}
【问题讨论】:
-
您是否搜索过您使用的
double数据类型的准确性?阅读:cplusplus.com/doc/tutorial/variables -
使用 IEEE 标准
double,您无法获得如此高的精度。您需要更大的浮点类型。 -
en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries 有一个任意值库的列表。查看其中一项以获得超过 16 位的准确度。
标签: math square-root newtons-method