【发布时间】:2013-08-11 00:58:58
【问题描述】:
我很困惑。我无法解释为什么在使用 double 数据类型时此测试通过但在使用 float 数据类型时失败。考虑下面的 sn-p 代码。
float total = 0.00;
for ( int i = 0; i < 100; i++ ) total += 0.01;
人们会预计 total 为 1.00,但它等于 0.99。为什么会这样?我用 GCC 和 clang 编译,两个编译器的结果是一样的。
【问题讨论】:
-
“使用
double数据类型时测试通过”是什么意思?无论您使用哪种浮点数据类型,此“测试”都不会在total中生成1.0。 -
使用
float,我得到0.999999344348907470703125;与double我得到1.0000000000000006661338147750939242541790008544921875。 YMMV。