首先,我意识到大多数基数为10的数字不能在基数2中精确表示,所以我的问题并不是关于浮点运算的不足.
我正在尝试编写一个函数,通过检查最后6个有意义的数字是否在某个容差范围内并将其更改为下一个可表示的某个假设的精确值(仅用于显示目的 – 除非它),尝试通过累积舍入误差来修正双重污染的函数是2的整数或幂.
令我惊讶的是我的函数的一个组件是exp10的输出;据我所知,只要两个双精度之间的间距小于2,那么存储为双精度的整数值应该是精确的 – 尽管10 ^ 14正在推动它,但这应该是一个精确的整数(因为10 ^ 14) = ~2 ^ 46.507< 2 ^ 53).然而,这不是我的测试所显示的. 我的调试工作的摘录(没有什么突出的显而易见)和输出如下:
double test = 0.000699;
double tmp = fabs(test);
double exp = 10.0 - floor(log10(tmp));
double powTen = exp10(10.0 - floor(log10(tmp)));
double powTen2 = exp10(exp);
double powTen3 = exp10((int)exp);
double powTen4 = exp10(exp);
double powTen5 = pow(10, exp);
printf("exp: %.16lf\n", exp);
printf("powTen: %.16lf\n", powTen);
printf("powTen2: %.16lf\n", powTen2);
printf("powTen3: %.16lf\n", powTen3);
printf("powTen4: %.1