我正在用 C/C++ 进行一些三角函数计算,并且遇到了舍入错误的问题。例如,在我的 Linux 系统上:
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
printf("%e\n", sin(M_PI));
return 0;
}
该程序给出以下输出:
1.224647e-16
当正确答案当然是 0 时。
使用三角函数时,我可以预期多少舍入误差?我怎样才能最好地处理这个错误?我熟悉 Bruce Dawson 的Comparing Floating Point Numbers中用于比较浮点数的 Units in Last Place 技术,但这似乎在这里不起作用,因为 0 和 1.22e-16 相隔相当多的 ULP。