比较c ++中的双打

时间:2016-06-28 14:17:49

标签: c++ compare double

我想确定一个点是否在圆圈内。 所以我这样做:

(x - center_x)^2 + (y - center_y)^2 < radius^2

但我的坐标是double,我想我应该用epsilon来做,所以也是 fabs ((x - center_x)^2 + (y - center_y)^2 - radius^2 ) < EPS更好吗?

4 个答案:

答案 0 :(得分:5)

使用QString line = str.readLine(); QStringList country = line.split(" "); Country myCountry; myCountry.setName(country[0]); myCountry.setArtist(country[1]); myCountry.setSong(country[2]); myCountry.setScore(0); All.push_back(myCountry); <进行比较时,您不需要epsilon,这些都非常好。你需要它而不是>。在你的情况下,你刚刚添加了一小部分半径,这可能是不可取的。 另请注意,==^不同。

答案 1 :(得分:4)

为此,你不能在C ++中使用'^'。 而不是(x - center_x)^2 + (y - center_y)^2 < radius^2(x - center_x)*(x - center_x) + (y - center_y)*(y - center_y) < radius*radius。 坐标加倍是没有问题的。

答案 2 :(得分:4)

取决于。

Naiive有序不等式比较通常最适合测试浮点值是否在阈值的一侧。

由于浮点错误,应该在阈值一侧的结果可能最终在另一侧。如果重要的是保证不会出现假阴性,同时增加误报的可能性,那么您建议的替代方案可能是合适的。

请注意,当输入值的大小不同时,基于恒定epsilon的误差补偿无效。

答案 3 :(得分:4)

没有。正如其他人所提到的,C中的运算符^是按位排他或不是幂。但是你可以使用内联函数:

inline double Sqr(double x) {return x*x;}
// ...
if (Sqr(x - center_x) + Sqr(y - center_y) < Sqr(radius)) // ...

关于你的问题,

fabs (Sqr(x - center_x) + Sqr(y - center_y) - Sqr(radius) ) < EPS

表示(x,y)在圆周 的