有人能解释一下这种行为吗?我非常了解浮点数的机器级表示。这似乎与printf及其格式有关。 两个数字都是通过浮点数表示精确的(检查:乘以64得到一个整数)。
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
double x1=108.765625;
printf("%34.30f\n", x1);
printf("%9.5f\n", x1);
printf("%34.30f\n", x1*64);
double x2=108.046875;
printf("%34.30lf\n", x2);
printf("%9.5f\n", x2);
printf("%34.30f\n", x2*64);
}
输出:
> 108.765625000000000000000000000000
> 108.76562
> 6961.000000000000000000000000000000
> 108.046875000000000000000000000000
> 108.04688
> 6915.000000000000000000000000000000
注意,第一个数字会向下舍入,第二个数字会向上舍入。