2013-02-21 59 views
1

我必须返回两个复数之间的距离,并且我得到的错误是在返回行中显示“复杂*无效转换为双精度”。复杂*无法强制转换为

double Complex::distance(const Complex &a, const Complex &b) 
{ 
    Complex *number = new Complex(); 

    number->modificaRe(a.real() - b.real()); 
    number->modificaIm(a.imag() - b.imag()); 

    return (double)number; 
} 

你能告诉我它是什么,我做错了吗? 更不用说老师给了我们这个函数的定义为“静态双重”,但我得到了另一个错误,所以我只是删除了“静态”。

+1

你知道,C++有在[标准库]复杂类型(http://en.cppreference.com/w/cpp/numeric/complex)? – 2013-02-21 16:43:33

+0

因为如果我不这样做,xCode会说:从'Complex *'转换为非标量类型'Complex'请求。这是我写C++的第一天[忘记提及,不要苛刻我] – Teodora 2013-02-21 16:44:06

+0

我认为你应该采取'数字'的绝对值* AFAIK - 这是如何定义距离。 – amit 2013-02-21 16:44:11

回答

1

如果我没记错的话可以用pythagorus计算的距离 - 这样创造距离 复杂的对象()是没有必要的。

double Complex::distance(const Complex &a, const Complex &b) 
{  
    double x = a.real() - b.real(); 
    double y = a.imag() - b.imag(); 

    return sqrt(x * x + y * y); 
} 
0

不支持从指针到Complexdouble的投射。你甚至不清楚为什么你要在这里创建一个指针,而不是仅仅在堆栈上分配它。

例如:

double Complex::distance(const Complex &a, const Complex &b) 
{ 
    Complex number; 

    number.modificaRe(a.real() - b.real()); 
    number.modificaIm(a.imag() - b.imag()); 

    return (double)number; 
} 
2

的问题是,一个双不能同时携带复杂的实部和虚部。

我相信两个复数之间的距离是差异平方和的sqrt。

所以,你的代码应该是...

double Complex::distance(const Complex &a, const Complex &b) 
{ 
    double number; 

    double r = a.real() - b.real(); 
    double i = a.imag() - b.imag(); 

    number = sqrt(r*r + i*i); 

    return number; 
} 

由于H2CO3指出,这可能是safter使用std :: hypot将...所以

double Complex::distance(const Complex &a, const Complex &b) 
{ 
    return std::hypot(a.real() - b.real(), a.imag() - b.imag()); 
} 
+0

而不是'sqrt(r * r + i * i)',使用'std :: hypot(r,i)'。 – 2013-02-21 16:47:42

+0

我不知道该说什么,从我所了解到的距离是:| z1-z2 | [..] – Teodora 2013-02-21 16:49:57

+0

非常感谢你们,伙计们! – Teodora 2013-02-21 16:50:41

1

最简单的解决办法是使用标准库的std::comlpex类模板。你可以用减法和std::abs获得的“距离”:

#include <complex> 
#include <iostream> 

template <typename T> 
T complex_distance(const std::complex<T>& a, const std::complex<T>& b) 
{ 
    return std::abs(b-a); 
} 

int main() 
{ 
    std::complex<double> c1(-1,-1); 
    std::complex<double> c2(2,2); 
    std::cout << (c2-c1) << std::endl; 
    std::cout << complex_distance(c2,c1) << std::endl; 
} 
相关问题