domingo, 24 de agosto de 2008

Comprobaciones numéricas en C

Es conocido que C es un lenguaje muy potente pero a muy bajo nivel, esto tiene algunas consecuencias al trabajar con valores numéricos que con otros lenguajes ni nos plantearíamos.

En primer lugar, ¿qué devuelven las funciones matemáticas en caso de que no exista un resultado a su operación?

Hay algunas funciones matemáticas como la raíz cuadrada y el logaritmo que no siempre tienen solución, en estos casos se devuelve nan (Not A Number) y se puede comprobar con la función isnan.

Otra situación posible es llegar a un valor infinito, ¿qué ocurre entonces? pues se devuelve inf y se puede comprobar con isinf.

Aquí un ejemplo de como se puede llegar a estas situaciones, para compilar gcc prog.c -o prog -lm.

#include <stdio.h>
#include <math.h>

int main(){
float dividendo=999999999;
float divisor=0.000000000000000000000000000000001;
float num=dividendo/divisor;

if(isinf(num)) printf("Infinito\n");
printf("%f\n",num);

num=sqrt(-num);
if(isnan(num)) printf("Not a number\n");

printf("%f\n",num);
}

0 comentarios: