Mnożenie macierzy

0

Witam! Dlaczego poniższy kod zawsze daje w wyniku same jedynki? Kiedy zamiast macierzy O podstawię inną o tych samych wymiarach i liczbach całkowitych, wynik jest poprawny.

void obrot( double( * P )[ 3 ], double( * O )[ 3 ], double( * W )[ 3 ] ) {
   
    int i, j, k, tmp, w1, kl;
    w1 = 1;
    kl = 3;
   
   
   
    for( i = 0; i < w1; i++ )
    for( j = 0; j < kl; j++ )
    {
        tmp = 0;
        for( k = 0; k < kl; k++ )
             tmp +=( P[ i ][ k ] * O[ k ][ j ] );
       
        W[ i ][ j ] = tmp;
    }
   
}


int main( void ) {
    double P[ 1 ][ 3 ] = { 3, 2, 1 };
    double sincos =( sqrt( 2 ) / 2 );
    double arcsin =( - sqrt( 2 ) / 2 );
    double s =(( 2 - sqrt( 2 ) ) + sincos );
    double z =(( 1 - sqrt( 2 ) ) - sincos );
    double O[ 3 ][ 3 ] = { { sincos, sincos, 0 }, { arcsin, sincos, 0 }, { s, z, 1 } };
    double W[ 1 ][ 3 ];
    int i, j;
    printf( "sincos: %f \n", sincos );
    printf( "arcsin: %f \n", arcsin );
    printf( "Tab: \n" );
    obrot( P, O, W );
    for( i = 0; i < 1; i++ ) {
        for( j = 0; j < 3; j++ )
       
             printf( "%f ", W[ i ][ j ] );
       
        printf( "\n" );
    }
    return 0;
}
1

Bo tmp jest intem. Zmień go na double.

1 użytkowników online, w tym zalogowanych: 0, gości: 1