为什么这个stl函数会返回这个double值?

时间:2011-11-10 03:31:56

标签: stl c++builder stringstream

以下断言在RAD Studio 2010中失败(顺便说一句,在Visual Studio 2010中会成功):

double              d1 = 0.0104;
double              d2 = 0.0;
std::istringstream  ss("0.0104");
ss >> d2;
assert(d1 == d2);
这让我有些惊讶。我追溯到提取运算符,看看发生了什么,到dinkumware/xlocnum,并且无法追踪。

有人能告诉我为什么__Stodx(... "0.0104")会返回一个与初始化为0.0104的双倍略有不同的值吗?

(我知道某些值无法用二进制表示。我想知道的是为什么结果的双精度值包含不同的值,以便我能理解它。)

谢谢!

2 个答案:

答案 0 :(得分:2)

此问题的answer

  

[29.17]为什么我的浮点比较不起作用?

     

因为浮点运算与实数不同   算术。

     

底线:切勿使用==来比较两个浮点数。

这里的答案是“为什么结果双打包含不同的值”

  1. d1是编译器
  2. 提供的精确常量表示
  3. d2是在转换期间计算的(请参阅strtod的示例),因此在浮点计算期间可能会出现一些舍入错误,如herehere
  4. 所述

答案 1 :(得分:1)

亲爱的我:编译器和库使用不同的方法将字符串转换为双精度数,并且无法访问编译器源,没有人能够告诉您这些方法的不同之处。

对不起, 我