gpt4 book ai didi

c - 对具有可变数量参数的函数中的复数求和

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:35 25 4
gpt4 key购买 nike

我想对 X 个复数求和,但这段代码返回了我:

-9.3e+61 + -1.9e+062i

typedef struct complex{
double real;
double imag;
} complex;

complex sum(int length, ...)
{
va_list param;
va_start(param, length);

complex out = {0, 0};
for(int i = 0;i<length;i++)
{
out.real += va_arg(param, complex).real;
out.imag += va_arg(param, complex).imag;
}
va_end(param);
return out;
}

当我在 for 中引用 real/imag 部分时,它返回正确的 real/imag 结果。

主要内容:

int main()
{
complex result;
complex a = {3.1,-2.3};
complex b = {0.5,-3};
complex c = {0,1.2};

result = sum(3,a,b,c);
printf("Sum is %.2g + %.2gi. \n", result.real, result.imag);

return 0;
}

我应该更改什么才能使其正常工作?

最佳答案

问题是每次调用 va_arg 时,它都会取出一整个 complex 结构。由于您在每个循环中调用它两次,因此您取出了 2 个不同的 complex 结构,这是不正确的。

您需要缓存结果并稍后访问成员:

for (int i = 0; i < length; i++)
{
complex currArg = va_arg(param, complex);
out.real += currArg.real;
out.imag += currArg.imag;
}

关于c - 对具有可变数量参数的函数中的复数求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15108684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com