Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #16  
Antiguo 14-09-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como redondear un numero en un procedimiento en Firebird Gaby123 SQL 0 26-02-2007 18:25:26
Cómo Redondear a 4 decimales un campo de tipo Numérico vick Conexión con bases de datos 1 11-10-2005 01:04:23
Funcio para obtener las decimas de segundo enzo Varios 2 13-05-2005 01:06:11
Mostrar un Float como un hh:mm:ss rjsitruiz Impresión 2 04-07-2004 14:25:29


La franja horaria es GMT +2. Ahora son las 00:29:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi