typedef struct Complex{
double real;
int img;
} Complex;
我见过人们将它用作类似的类型:
Complex sqrt( double x) {
}
'real'和'img'如何在这种功能中发挥作用?感谢
答案 0 :(得分:4)
可以像这样使用:
Complex sqrt(double x) {
Complex c = {0.0, 0.0};
if ( x>= 0.0 )
c.real = square_root(x);
else
c.img = square_root(-x);
return c;
}
我不知道这是不是一个错误,但Complex :: img应该也是一个双倍。
(请注意,复数是Reals的超集,因此如果其虚部为零,则可以在double的位置使用复数)
答案 1 :(得分:3)
您可以这样使用它:
Complex sqrt( double x) {
Complex r;
r.real = f(x);
r.img = g(x);
return r;
}
在此示例中,f(x)
和g(x)
将调用计算复数x
的平方根的实部和虚部的函数。 (实际上,您可能会计算sqrt()
函数中的平方根,但我只是将其作为如何使用Complex
结构的示例。)
以下是reference that explains structures in C,可能对您有所帮助。
答案 2 :(得分:0)
Complex numbers在数学中有广泛的用途 - 角色将取决于应用的背景。
答案 3 :(得分:0)
我想如果签名是
Complex sqrt( double x);
然后x表示实际值。因此Complex.img可以是0/1,表示x是正还是负。
示例(将x作为实数)
//C like pseudocode
Complex sqrt(double x){
Complex result={0,0};
if (x==0) return result;
if (x<0){
result.img =1;
real = abs(x);
}
result.real= sqrt_(x);//calculates square root of a positive value.
return result;
}
//some other place
double r =-4.0;
Complex root = sqrt(r);
//prints "Square root of -4.0 is 2i"
printf("Square root of %.2f is %.2f%c",r,root.real,(root.img?'i':''));
答案 4 :(得分:0)
假想部分也应该是双倍的。
对于真实(双x):
Sqrt(x).Real = x >= 0 : Math::Sqrt(x) : 0;
Sqrt(x).Imaginary = x < 0 : Math::Sqrt(x) : 0;
像FinnNk建议的那样,阅读一些关于复杂数学的内容。
答案 5 :(得分:0)
复数的平方根是通常在您的手持计算器上找不到的计算....
查看DeMoivre的定理,该定理用于将变量更改为极坐标 - 对于复数的平方根,有一个闭合形式公式,a + ib。
保