我一直在尽一切努力让它发挥作用。所以基本上我希望程序在点后的数字变化少于 14 位数字后停止。但显然这种情况从未发生过。
#include <stdio.h>
int main (void)
{
double stand_n = 1.0;
for (double stand = 1.0; stand_n - stand <= 10e-15; stand = stand_n)
{
stand_n = 1.0 / stand + stand / 2.0;
printf("%.14lf\n", stand_n);
}
}
输出:
1.50000000000000
1.41666666666667
1.41421568627451
1.41421356237469
1.41421356237309
1.41421356237309
1.41421356237309
1.41421356237309
1.41421356237309
...
您在执行
stand = stand_n
之前执行 stand_n - stand <= 10e-15
,因此 stand_n - stand
一次始终为零,因此循环永远不会结束。
三个错误。
>= 10e-15
时重复,而不是在差异为 <= 10e-15
时重复。stand - stand_n
而不是 stand_n - stand
,因为数字会变小。