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

Math 我有一个结构,但我没有';我不知道如何使用它,math,Math,我见过人们把它当作一种类型来使用,比如: typedef struct Complex{ double real; int img; } Complex; “real”和“img”如何在这类功能中发挥作用?谢谢您可以这样使用它: Complex sqrt( double x) { } //C like pseudocode Complex sqrt(double x){ Complex result={0,0}; if (x==0) return result;

我见过人们把它当作一种类型来使用,比如:

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

“real”和“img”如何在这类功能中发挥作用?谢谢

您可以这样使用它:

Complex sqrt( double 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':''));
在本例中,
f(x)
g(x)
将是对计算复数
x
平方根的实部和虚部的函数的调用。(实际上,您可能会在
sqrt()
函数中计算平方根,但我只是将此作为如何使用
复杂结构的示例。)


这是一个可能对您有帮助的示例。

在数学中有广泛的用途-角色将取决于应用程序的上下文。

我想如果签名是

Complex sqrt( double x) {
    Complex r;
    r.real = f(x);
    r.img = g(x);
    return r;
}
那么x代表一个实值。所以Complex.img可以是表示x是正的还是负的0/1

示例(以x为实数)

//类C伪代码
复合sqrt(双x){
复杂结果={0,0};
如果(x==0)返回结果;

如果(x可以这样使用:

Complex sqrt( double 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':''));
我不知道这是否是一个错误,但Complex::img也应该是一个double


(请注意,复数是实数的超集,因此,如果其虚部为零,则可以用复数代替double)

虚部也应该是double

对于实数(双x):

Sqrt(x).Real=x>=0:Math::Sqrt(x):0;
Sqrt(x):虚的=x<0:Math::Sqrt(x):0;

正如FinnNk建议的那样,读一点关于复数的知识。

复数的平方根是一种在手持计算器上通常找不到的计算方法

检查DeMoivre定理,它用于将变量转换为极坐标,对于极坐标,复数的平方根a+ib有一个封闭式公式


Paul

怎么了?它返回了一个
复杂的
结构体(按值)。第一个代码片段使用复杂的结构体名称和变量定义:它不能工作。是否有可能缺少
typedef
'是具有上述定义的有效类型。另外,必须:。为什么您的“img”是int,而“real”是double?为什么不两个都是double?
Sqrt(x).Real = x >= 0 : Math::Sqrt(x) : 0;
Sqrt(x).Imaginary = x < 0 : Math::Sqrt(x) : 0;