gpt4 book ai didi

c++ - C++ 中的 "=="有时会为相同的 double 给出不同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:55 25 4
gpt4 key购买 nike

<分区>

代码如下:

#define MIN_RESOLUTION          ( 0.0000001)
double yMax, yMin;

// calculate yMax, yMin
//....

if( fabs( yMax - yMin) > MIN_RESOLUTION)
{
scaleMin = yMin;
scaleMax = yMax;
}
else
{
// following two lines are executing
scaleMin = yMin - 1.0;
scaleMax = yMax + 1.0;

// could still be the same...
if(scaleMin == scaleMax)
{
if(scaleMax > 0) // decrease min
scaleMin = 0;
else // increase max
scaleMax = 0;
}
}

assert(scaleMin != scaleMax);

在我的示例中 yMin == yMax == 1.6170737412027187 e17。因此,第 14 和 15 行总是被执行:

  scaleMin = yMin - 1.0;
scaleMax = yMax + 1.0;

我知道 double 的精度是有限的(15 位),加减 1 的操作对于这么大的数字没有多大意义。但我希望“==”操作总是给出“true”作为结果。而事实并非如此。

有时会发生第 18 行中的两个 double 值不相等(scaleMin == scaleMax)而几行之后它们相等(即第 27 行中的断言被触发)。数字总是相同的 (1.6170737412027187 e17)

我还尝试用这个替换第 (27) 行:

if (scaleMin == scaleMax)
{
assert(false);
}

行为仍然相同。有什么想法吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com