1

方程式系の解を得る必要があります。この目的のために、関数 sgesv_() を使用します。

すべてがうまく機能し、ソリューションの正しい結果が返されます。

しかし、奇妙な警告が表示されます。

警告: 互換性のないポインター型から 'sgesv_' の引数 3 を渡しています

AppleがWWDCビデオで使用しているように、私はこの機能を使用しています。

私は何を間違っていますか?

a1、a2、b1、b2、c1、c2 は float です

        __CLPK_integer info;
        __CLPK_integer n=2;
        __CLPK_integer nb=1;
        __CLPK_integer ipiv[n];
        float A[n][n];
        A[0][0]=a1;
        A[0][1]=a2;
        A[1][0]=b1;
        A[1][1]=b2;
        float B[n];
        B[0]=-c1;
        B[1]=-c2;
        sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info);
4

1 に答える 1

4

3番目のパラメーターはであることが意図されてfloat *いますが、floatの2D配列を渡しています。これらのフロートが正しい順序になっているのはたまたまです。警告を取り除くには、次のようにします。

    sgesv_(&n, &nb, &A[0][0], &n, ipiv, B, &n, &info);

またはこれ:

    sgesv_(&n, &nb, A[0], &n, ipiv, B, &n, &info);

またはこれさえ:

    sgesv_(&n, &nb, (float *)A, &n, ipiv, B, &n, &info);

または、Aアレイを「フラット化」することもできます。

    float A[n * n];
    A[0 * n + 0] = a1;
    A[0 * n + 1] = a2;
    A[1 * n + 0] = b1;
    A[1 * n + 1] = b2;
    // ...
    sgesv_(&n, &nb, A, &n, ipiv, B, &n, &info);
于 2011-08-16T16:23:49.957 に答える