摘要 探讨一个不动点的计算精度问题。
不动点是一类特殊的循环迭代。它有形式
例1. 已知迭代[1]
计算
显然,每个 均为 0.5 .
不妨在Visual Studio 2010 下用下列C语言代码计算:
#include <stdio.h>
#include <math.h>
int main() {
double y = 0.5;
int n = 9;
for (int i = 2; i <= n; i++) {
y = sin(121 * asin(y));
}
printf("%f", y);
return 0;
}
则运行后输出 -0.257251 .
若用Java编程计算:
import java.lang.Math;
public class Xh{
public static void main(String[] args) {
double y = 0.5;
for (int i = 2; i <= 9; i++) {
y = Math.sin(121 * Math.asin(y));
}
System.out.println(y);
}
}
则运行后输出似乎更精确:-0.25725124685210005 .
这样,二者均输出错误结果。
参考文献
[1] 赵世忠, 陈冬火, 刘静. 循环迭代程序的一种可信计算算法. 软件学报, 2020, 31(12): 3685-3699