Tengo esta función:Función funciona bien, pero devuelve la basura
float calc_nnc(struct ImageWindow *window1, struct ImageWindow *window2) {
/* More code */
double numerator = (double) sum_a_x_b;
double divisor = (sqrt(sum_a) * sqrt(sum_b));
double result = numerator/divisor;
float resultf = (float) result;
printf("numerator: %lf, divisor: %lf, result: %lf, resultf: %f\n",
numerator, divisor, result, resultf);
return resultf;
}
Los printf
imprime los resultados que cabe esperar para ver:
axb = 1383, a = 1776, b = 4959
numerador: 1383.000000, divisor: 2967.690011, resultado: 0.466019, resultf: 0,466019
Sin embargo, cuando trato de imprimir el resultado de calc_nnc
en otra función:
float nnc_likeness;
unsigned int x, y;
for (y = 0; y <= y_max; y++) {
for (x = 0; x <= x_max; x++) {
set_image_window(&window_big, big, x, y, width, height);
nnc_likeness = calc_nnc(&window_small, &window_big);
printf("likeness: %f\n", nnc_likeness);
}
}
recibo de basura:
semejanza; 1055824384,000000
Es decir, veo a los valores correctos calc_nnc
es la computación, pero justo después de que veo un valor dañado para nnc_likeness
.
¿Alguna idea de lo que está pasando? ¡Gracias!
¿Estás seguro de que tienes el prototipo correcto para 'calc_nnc' en el contexto donde lo llamas? Podría ser que su compilador esté asumiendo un tipo de retorno de 'int' y eso está volviendo loco al sistema. ¿Tienes todas tus advertencias habilitadas? –
De hecho, se ve exactamente como eso es lo que está sucediendo, escribiendo una respuesta ahora. –
El prototipo en el encabezado es el mismo. Puse '-Wall' y obtuvo una idea interesante. –