Tengo una función que multiplica dos matrices A y B y luego imprime el resultado. Obtuve dos salidas diferentes cuando ejecuté el programa de dos maneras similares.argumentos invertidos para una función C
primero:
FILE *f;
f = fopen("in.txt","r");
struct Mat* A = read_mat(f);
struct Mat* B = read_mat(f);
print_mat(mat_mul_1(A, B));
la salida era la multiplicación exacta de
A * B
Segundo:
FILE *f;
f = fopen("in.txt","r");
print_mat(mat_mul_1(read_mat(f), read_mat(f)));
la salida fue la exacta multiplicación de
B * A
Quiero saber por qué los argumentos se ha invertido?!
(como la función 'mat_mul_1' es un cuadro negro)
podría u dime por qué iba a cambiar el compilador el orden de los argumentos? ya que veo que es mejor evaluarlo siempre de izquierda a derecha, ya que ya está ordenado –
en realidad no es necesariamente "mejor". Por ejemplo, hipotéticamente, puede ser más rápido empujar cosas en la pila de izquierda a derecha y evaluar los resultados de abajo hacia arriba (por lo tanto, esencialmente en reversa). el punto es que si el orden de lectura importa, debería leer EXPLICITAMENTE el archivo. –
@ M.ElSaka: el compilador convierte internamente una expresión en un tipo de estructura de árbol binario, donde cada operando forma una "hoja". Luego puede evaluar este árbol comenzando por la hoja más a la izquierda o la más a la derecha. Lo que es mejor para el rendimiento en una plataforma específica no es obvio, si es que importa. Esta es la razón por la cual es un comportamiento no especificado. – Lundin