uint64_t max = UINT64_MAX;
double d = (double)max;
uint64_t n = (uint64_t)d;
printf("max:%llu, n:%llu, d:%lf, equal: %s\n", max, n, d, max == n ? "true" : "false");
输出结果
max:18446744073709551615, n:0, d:18446744073709551616.000000, equal: false
double 只有52位尾数位, 最多表示53位有效位,
uint64_t 转成 double的时候, 丢失了11位的精度
int64_t 转成 double的时候, 会丢失10位的精度
网友评论