lunes, 21 de mayo de 2012

Perdida de precisión punto flotante (float) en C

Experimentando con distintas formulas implementadas en C, recién después de muchos años de ocupar este lenguaje caí en cuenta de la perdida de datos que acarrea el uso en operaciones sucesivas del tipo de dato float, tanto así que ociosamente me di el trabajo de hacer un programa que demostrara dicha perdida.
La información en general en Internet respecto a este punto es bastante limitada siendo la fuente que mejor explica este tema una pagina relacionada con la queridisima empresa para mis compañeros linuxeros microsoft :D


fuente: http://msdn.microsoft.com/es-es/library/c151dt3s.aspx


Si alguno de mi compañeros anda por ahi sobrado de 5 minutos para hacer copy paste del código, y lo prueba en linux, agradecería que me comente sus resultados :D


#include <stdio.h>


int main(){
    float a;
    float numero;
    float ultimo;
    printf("Elija el numero para calcular la precision: ");
    scanf("%f", &numero);
    for(a=0;a<=numero;a+=0.1){
        //printf("\n%f", a);
        //printf("\n%.21f", a);
        printf("\n\tnumero mostrado: %f, numero real %.21f", a, a);
        ultimo=a;
    }
    printf("\n");
    printf("\nNumero ingresado %d", (int)numero);
    printf("\nNumero en punto flotante %f", numero);
    printf("\nNumero en punto flotante con precision %.21f", numero);
    printf("\nUltimo numero del ciclo: %f", ultimo);
    printf("\nUltimo numero del ciclo con precision: %.21f", ultimo);

    printf("\n\nEstos numeros se obtienen cuando se corta el ciclo (for):\n");
    printf("\nNumero final procesado en punto flotante %f", a);
    printf("\nNumero final procesado en punto flotante con precision %.21f", a);
    getch();
    return 0;
}


1 comentario: