problema con flotantes

Lope
10 de Octubre del 2003
buenas. A ve si me podeis echar una ayuda con este codigo, es parte de un programa mas grande pero lo he metido como prueba en otro archivo:
#include <stdio.h>
#include <conio.h>
float mot_AT_integ_num(float x);

void main(){
float valor,valor2;
do{
scanf("%f",&valor);
valor2=mot_AT_integ_num(valor);
printf("mot at num =%fn",valor2);
}while(valor!=-2);

}
float mot_AT_integ_num(float x){
if (x>=-0.6 && x<=-0.2){
printf("%fn",(float)(x*x*x/1.2));
printf("%fn",(float)((0.6*x*x)/(0.8)));
printf("%fn",(float)(x*x*x/1.2)+((0.6*x*x)/(0.8)));
return (float)((float)(x*x*x/1.2)+(float)((0.6*x*x)/(0.8)));
}
if (x>-0.2 && x<=0.2){
return (float)(((-x*x*x)/(1.2))+((0.2*x*x)/(0.8)));
}
return 0;
}

lo que me ocurre es que cuando le envio el valor -0.6 me devuelve el valor 0, es decir, no entra en el if, cuando deberia entrar y devolverme un 0.09.

Muchas gracias de antemano.

Doctor Luz
10 de Octubre del 2003

if (x>=-0.6f && x<=-0.2f)

Ponle la f de float a ver que pasa

o bien if (x>=-(float)-0.6 && x<=(float)-0.2)

Es problema de redondeos bits y como el procesador define los float.



lope
10 de Octubre del 2003
muchas gracias. Funciona a la perfeccion.