author | Rodrigo Campos
<rodrigo@sdfg.com.ar> 2010-09-09 02:47:08 UTC |
committer | Rodrigo Campos
<rodrigo@sdfg.com.ar> 2010-09-09 02:47:08 UTC |
parent | fbb29a2bd843bd767e4b55dfaeea53732768cf76 |
aritmetica.cpp | +2 | -18 |
diff --git a/aritmetica.cpp b/aritmetica.cpp index 716a612..b687421 100644 --- a/aritmetica.cpp +++ b/aritmetica.cpp @@ -38,24 +38,8 @@ double trunc(int prec, double n) double round_up(int prec, double n) { - /* Sabemos que el double tiene 64 bits en total, de los cuales se usan - * 52 para la mantisa. */ - - // Truncamos n - uint64_t t = to_u64(trunc(prec, n)); - - // Nos armamos el mismo numero truncado pero que tiene el 1 en el bit - // prec + 1 - uint64_t to_round = t | (1 << (52 - prec - 1)) ; - - // Nos armamos el double (normalizado, etc. porque la compu hace las - // cuentas) que tiene 1 en la posicion prec+1 de la mantisa - double to_round_d = to_double(to_round) - to_double(t); - - // n + to_round_d es el ajuste que hay que hacer por redondeo a prec - // digitos. Como n + to_round_d ya esta redondeado a prec digitos, - // lo truncamos a prec digitos de precision - return trunc(prec, n + to_round_d); + double round = trunc(prec + 1, n) - trunc(prec, n); + return n + round; }