SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: rompecabezas en Viernes 29 de Enero de 2010, 13:42

Título: numero de cifras significativas
Publicado por: rompecabezas en Viernes 29 de Enero de 2010, 13:42
necesito saber como cambiar el numero de cifras significativas (int nCifSig) de un numero en particular (double val). de momento he intentado:

double base = 10;
double cifras, num1, num2;
cifras = pow ( base, nCifSig);
val = val*cifras ;
num1 = ceil(val);
num2 = floor(val);
if( fabs( fabs(val)-fabs(num1)) > fabs(fabs(val) - fabs(num2)))
          { val = num2/cifras ;   }
else    { val = num1/cifras ;   }

funciona, pero si tengo xej 5.52285628e-03 y quiero 2 cifras significativas (es decir quiero 5.52e-03) el programa ve el numero como 0.00552285628 y por tanto me devuelve 0.01

mi otra opcion es usar setprecision(nCifSig); pero eso me cambia la precision permanentemente... ahi seria ideal poder hacer algo del tipo
oldprecision = getprecision(); // esta funcion me la he inventado, claro, eso es lo que no sé hacer...
setprecision(nCifSig);
....
setprecision(oldprecision); // una vez necesite mi vieja precision


toda sugerencia / ayuda / consejo es bienvenid@

:)