我有一个结构,但我不知道如何使用它

时间:2009-10-25 22:17:06

标签: math

typedef struct Complex{
double real;
int img;
} Complex;

我见过人们将它用作类似的类型:

Complex sqrt( double x) {
}

'real'和'img'如何在这种功能中发挥作用?感谢

6 个答案:

答案 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。