0

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;
}

機能させるには何を変更すればよいですか?

4

1 に答える 1

3

問題は、 を呼び出すたびに、構造体va_arg全体が 1 つ取り出されることcomplexです。ループごとに 2 回呼び出すため、2 つの異なる構造体を取り出しますがcomplex、これは正しくありません。

結果をキャッシュし、後でメンバーにアクセスする必要があります。

for (int i = 0; i < length; i++)
{
    complex currArg = va_arg(param, complex);
    out.real += currArg.real;
    out.imag += currArg.imag;
}
于 2013-02-27T09:58:26.340 に答える