c ++欧几里德距离

时间:2010-04-28 15:52:13

标签: c++

此代码编译并运行但不输出正确的距离。

for (int z = 0; z < spaces_x; z++)
{
    double dist=( ( (spaces[z][0]-x)^2) + ( (spaces[z][1]-y)^2) );
    dist = abs(dist);   
    dist = sqrt(dist);
    cout << "for x " << spaces[z][0] <<
            " for y " << spaces[z][1] <<
            " dist is  "<< dist << endl;

    if (dist < min_dist)
    {
        min_dist = dist;
        index = z;
    }
}

有谁知道问题可能是什么?

4 个答案:

答案 0 :(得分:21)

语法^ 2并不意味着提升2的幂 - 它意味着异或。使用x * x

double dx = spaces[z][0] - x;
double dy = spaces[z][1] - y;
double dist2 = dx * dx + dy * dy;

答案 1 :(得分:7)

使用hypot()而不是手动平方并添加并取平方根可能是一个更好的主意。 hypot()负责处理一些天真的方法会失去精确度的情况。它是C99和C ++ 0x的一部分,对于没有它的编译器,总是boost.math

答案 2 :(得分:6)

^xor运算符;它不执行取幂。

在一般情况下,如果你想提升某些能力,你应该使用std::pow功能。但是,在这种特定情况下,由于它是正方形,因此您最好只使用乘法(例如,x * x而不是std::pow(x, 2))。

答案 3 :(得分:2)

请注意,在C ++中,插入符号(^)不是取幂运算符。相反,它是一个按位排他或。