为什么 ^ 运算符不能用于求幂?

问题描述 投票:0回答:4

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

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;
    }
}

有人知道问题出在哪里吗?

c++ operators xor exponentiation
4个回答
21
投票

语法

^ 2
并不意味着求 2 次方 - 它意味着 XOR。使用
x * x

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

8
投票

使用

hypot()
可能是一个更好的主意,而不是手动平方、相加和取平方根。
hypot()
解决了许多简单方法会失去精度的情况。它是 C99 和 C++0x 的一部分,对于没有它的编译器,总是有 boost.math


6
投票

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

一般情况下,如果你想求某物的幂,你应该使用

std::pow
函数。但是,在这种特定情况下,由于它是平方,因此您最好只使用乘法(例如,
x * x
而不是
std::pow(x, 2)
)。


2
投票

请注意,在 C++ 中,插入符号 (

^
) 不是求幂运算符。相反,它是按位异或。

© www.soinside.com 2019 - 2024. All rights reserved.