Int64/UInt64 转 Double 精度丢失问题

    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位的精度

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容