Ver Mensaje Individual
  #16  
Antiguo 14-09-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Estoy con Delphius, el modo propuesto por el amigo rrf está bien como ejercicio, pero no es práctico ni vale para el "mundo real", ya me imagino las caras de los clientes protestando por esos "redondeos" tan "cuadrados"

Creo que la función que he propuesto sí es válida para "la vida real":

function Redondeo (valor: Double; decimales: integer = 0): Double;

Indicas el valor a "redondear" y el número de decimales al que quieres el redondeo.
Exacto. No es como naturalmente medimos y trabajamos. Y además, es inútil intentar medir más allá de la escala que nos brinda las herramientas y a la que estamos interesados de aceptar como precisión. Esto se dice muy a menudo en las clases de cálculo.

Si uno acepta que sus mediciones serán precisas a 4 decimales, por dar un número, entonces sus mediciones no podrán ser mucho más precisas más allá de 5 decimales. Ergo... no tiene sentido continuar buscando más precisión. Por ejemplo:

Estoy midiendo la altura de un andamio con un metro convencional (al centímetro)... y justo la marca está entre los 3,20 y 3,21. No tiene sentido práctico que pretenda medir hasta las milésimas si la cinta métrica no tiene esa unidad de medida. ¿Que valor tomo? ¿3,20 o 3,21? Según esta regla, ... no tengo otra elección... o asumo 3,20 ó 3,21. No puedo asegurar si es 3,205 o 3,209, 3,201... o cualquier otro número que esté en el rango [3,20; 3,21]

Es por ello que una vez finalizada la medición, se adopta un criterio de redondeo.
Y Por más preciso que sean los cálculos el valor exacto podría (y estará) en un margen de +- 0,5 ulp.
Hagamos de cuenta que me consigo un metro con escala al milímetro... llego a que mide 3,203. El valor más preciso y exacto estará en el rango [3,2025; 3,2035].

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Recién leo el hilo nuevamente...

Y coincido cien por ciento con Delphius.
Un error que por defecto o exceso ajustemos en diezmilésimas, podrían convertirse en centesimas, por ejemplo.

Saludos.
Exacto. Y como dije, ir redondeando desde más decimales a menos es una técnica que irá acumulando el error.

Creo que mis explicaciones se ilustrará mejor con una regla:

Código:
+|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+
|         |         |         |    *    |         |         |
0                   1                   2                   3
+-----------------------------------------------------------+
El * indica el número más exacto que podemos medir a esa escala. Subamos (o mejor dicho, bajemos) de decimales... Ahora en esta nueva escala tenemos dos opciones de redondeo:

Código:
+-|-|-|-|-+-|-|-|-|-+-|-|-|-|-+-|-|-|-|-+-|-|-|-|-+-|-|-|-|-+
|         |         |         |   * *   |         |         |
0                   1                   2                   3
+-----------------------------------------------------------+
Sigamos... veamos como ahora el efecto de redondeo nos va alejando:

Código:
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
0                   1         *         *                   3
+-----------------------------------------------------------+
Y por último:

Código:
+-------------------+-------------------+-------------------+
|                   |                   |                   |
0                   *                   *                   3
+-----------------------------------------------------------+
Como se aprecia, cada vez el rango del error absoluto se ve incrementado debido a los redondeos por exceso y por defecto.

Quizá para ciertos números el algoritmo que implementado rrf no provoque demasiada perturbaciones, pero en lo general no es óptimo. Pruébese con decimales como: ,1919191919... o ,91919191... o incluso com estos: ,454545... y ,54545454...

Creo que con ello queda más que evidente el porqué es inútil asumir decimales y redondeos más allá de lo que estamos dispuestos a tolerar.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita