#include #include #include #include #include // Lee el valor de los parametros y los asigna a las variables: // nterm - numero de terminos de la serie void readParams(int argc, char **argv, int *nterm) { if(argc>1) *nterm = 2*(atoi(argv[1])/2); else *nterm = 50; } double serie(int nterm) { double dval=0; int i; for(i=1; i<=nterm; ++i) if(i%2) dval += 1.0/i; else dval -= 1.0/i; return(dval); } int main(int argc, char **argv) { int nterm; double dres; // Lectura de los parametros readParams(argc, argv, &nterm); // Calculo de la aproximacion a log(2) usando tres // forma de redondeo printf("Redondeo hacia el mas cercano:\n"); dres = serie(nterm); printf("Valor obtenido: %10.6f | log(2)=%10.6f | error=%e\n", dres, log(2), dres-log(2) ); printf("Redondeo hacia abajo:\n"); fesetround(FE_DOWNWARD); dres = serie(nterm); printf("Valor obtenido: %10.6f | log(2)=%10.6f | error=%e\n", dres, log(2), dres-log(2) ); printf("Redondeo hacia arriba:\n"); fesetround(FE_UPWARD); dres = serie(nterm); printf("Valor obtenido: %10.6f | log(2)=%10.6f | error=%e\n", dres, log(2), dres-log(2) ); return(0); } // Para compilar // gcc -o serie serie.c -lgsl -lgslcblas -lm // Para ejecutar // ./serie 60