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;