Algoritmos de redondeo
Redondear un valor significa reducir su precisión, ajustar a determinado número de decimales una serie de guarismos, perdiendo exactitud en el resultado final. Generalmente, esa precisión menguada no es significativa o la consideramos despreciable, y es que no podemos pretender que nuestros limitados cerebros humanos trabajen con infinitos decimales de concreción.
Un ejemplo muy sencillo podría ser, como comentábamos al principio, el efecto de redondear una cantidad que es media aritmética del precio en euros de varios artículos a la venta. Aunque los precios sólo cuenten con dos decimales (precisión de céntimo), es más que probable que su media dé como resultado un valor de muchos más decimales (o infinitos decimales, incluso). Un resultado de 5,18686 € no es manejable para nosotros, por lo que optamos por redondearlo a 5,19 € (ya que el tercer decimal es mayor que cinco). El valor es menos preciso, por lo que no es válido realmente, pero lo adoptamos como tal.
Pero este no es el único método de redondeo que existe, hay muchos más. Según el caso, debemos considerar utilizar un algoritmo que minimice los efectos de la pérdida de precisión, especialmente en el caso de múltiples iteraciones de procesamiento. Esto es, los errores aumentan significativamente con el tiempo debido a la realización de operaciones de redondeo sobre datos previamente ya redondeados.
NOTA: Se utiliza el punto (.
) como separador decimal en todos los ejemplos, cosa que no me hace ninguna gracia, pero es más legible para ti.
Truncamiento
Es el redondeo menos preciso. Consiste en truncar o cercenar el valor eliminando por completo la parte decimal, quedándonos exclusivamente con la parte entera. Así pues, 3.15
daría como resultado 3
, y 3.87
daría como resultado también 3
. Es el procedimiento que utiliza la función Fix
de Visual Basic o el método Math.Truncate
de los lenguajes de programación del entorno .NET Framework.
Es un ejemplo de redondeo simétrico, porque afecta al valor absoluto de números positivos y negativos de la misma manera. Así, el truncamiento de -3.87
es -3
.
Redondeo al más cercano
Es el algoritmo más intuitivo y el que más utilizamos en la vida real. En este caso valores como 3.1
, 3.3
ó 3.4
se redondean a la baja a 3
, mientras que valores tales como 3.6
, 3.8
ó 3.9
se redondean al alza a 4
. El problema está en qué hacer con valores del tipo 3.5
. De hecho, este redondeo al más cercano puede considerarse como un superconjunto de dos opciones complementarias denominadas redondeo hacia arriba y redondeo hacia abajo, que vemos a continuación.
Redondeo hacia arriba (aritmético)
Conocido también como redondeo aritmético, es un subconjunto del anterior que asociamos al tipo de redondeo que nos enseñaron a utilizar en el colegio. En este caso, un valor de 3.5
se redondea a 4
(hacia arriba). Con este nivel de precisión, y para este ejemplo concreto, podemos considerar que hay 10 valores que comiencen con un 3
en el lugar más significativo (3.0
, 3.1
, 3.2
, 3.3
, 3.4
, 3.5
, 3.6
, 3.7
, 3.8
y 3.9
). Sobre esta base, tiene sentido que cinco de los valores se redondeen a la baja y otros cinco al alza, repartiendo la exactitud equitativamente. De este modo, los cinco valores que van desde 3.0
hasta 3.4
se convierten en 3
, y los restantes cinco valores (de 3.5
a 3.9
) se redondean a 4
.
Este algoritmo puede implementarse con redondeo de forma simétrica (donde -0.5
sería -1
) o de forma asimétrica (donde -0.5
se redondearía a 0
). Y es que algunos matemáticos y desarrolladores de sistemas consideran que redondear «hacia arriba», por ejemplo, -3.5
sería alcanzar un valor de -4
(de forma simétrica a su análogo positivo). Empero, otros ingenieros especialistas dicen considerar «arriba» el infinito positivo, por lo que apuestan por un redondeo de -3.5
a -3
.
Es el caso de la función REDONDEAR
(ROUND
) de la hoja de cálculo Excel, de la función Round
de SQL Server, de la función roundn
de MATLAB (redondeos simétricos los tres) y del método Math.Round
de Java (redondeo asimétrico, en este caso).
Redondeo hacia abajo
Subconjunto también de redondeo al más cercano y contrario al anterior, este algoritmo convertiría un valor de 3.5
en 3
. Así trabajan las funciones de Excel REDONDEAR.MENOS
(ROUNDDOWN
) y MULTIPLO.INFERIOR
(FLOOR
), y también la función Fix
de VBA (Visual Basic para Aplicaciones).
El problema con los negativos es el mismo que el comentado en el punto anterior y se puede solventar de ambas maneras expuestas.
Redondeo de equilibrio (alterno)
Si necesitamos redondear multitud de cantidades que se van acumulando y siempre utilizamos el mismo redondeo en la misma dirección, es posible que, con el tiempo de proceso, esta tendencia nos lleve a errores importantes de cálculo a medida que las operaciones se llevan a cabo.
Una manera de subsanar esto es utilizar un redondeo alternado que proporcione equilibrio al conjunto, redondeando a veces hacia arriba y otras veces hacia abajo. Así pues, si en una operación hemos transformado 3.5
en un valor de 4
, en la siguiente que aparezca 4.5
, por ejemplo, redondearemos a la baja a 4
, ajustando de esta forma los posibles errores.
Pocos productos implementan este tipo de redondeo y, por norma general, hay que programarlo a mano.
Redondeo del banquero
El redondeo del banquero, o redondeo bancario, se llama así porque es el utilizado preferentemente en el mundo de las finanzas. Y sí, estás pensando bien, sólo les beneficia a ellos.
Es una variante del redondeo de equilibrio y propone, por convenio, ajustar siempre los valores medios (x.5
) al número par más cercano. De este modo, 1.5
y 2.5
serán siempre 2
, y 3.5
y 4.5
serán ambos redondeados a 4
. Por supuesto que estos son valores de ejemplo, en el mundo real hablamos de hacer los redondeos a dos decimales.
Bancos y cajas de ahorro ingresan más de 270 millones de euros anuales a causa de este redondeo. Las matemáticas al servicio del poder económico.
Funciones de Visual Basic y VBA como CInt
, CLng
o Round
hacen uso del redondeo bancario para hacer sus cálculos.
Redondeo aleatorio
Incluso el redondeo bancario puede generar desviaciones de cálculo cuando la cuantía de operaciones es muy elevada. Para evitar eso se recurre al redondeo aleatorio, otra variante del redondeo de equilibrio que asigna la dirección de redondeo (al alza o a la baja) de una manera completamente aleatoria.
Tampoco se implementa de forma nativa por casi ningún lenguaje de programación o aplicación matemática.
Redondeo impar
Este algoritmo redondea un número hasta el entero impar más próximo. Así, 3.5
será redondeado a 3
y 4.5
lo será a 5
. Para los números negativos funciona de igual manera.
Es un método que se utiliza escasamente porque es incapaz de redondear a cero (0
), atributo imprescindible para los algoritmos de redondeo. Lo emplea la función REDONDEA.IMPAR
(ODD
) de Excel.
Redondeos para todos los gustos y manías. En función de la aplicación que estemos desarrollando será necesario manejar un tipo de algoritmo u otro. Evidentemente, no es lo mismo un desarrollo simple de facturación o TPV, donde el más sencillo de los redondeos puede servirnos, que uno de financias o, si me apuras, de CAD, en donde la máxima precisión se antoja imprescindible. El programador habrá de decidir, en cualquier caso, qué algoritmo de redondeo utilizar para conseguir sus objetivos.
[…] Algoritmos de redondeo https://www.teknoplof.com/2010/11/03/algoritmos-de-redondeo/ por guachindango hace 2 segundos […]
[…] » noticia original […]
[…] » noticia original […]
[…] » noticia original […]
Interesante la nota.
Muchas gracias.
No estaría de más haber mencionado en el artículo como se hace el redondeo en punto flotante.
[…] This post was mentioned on Twitter by Gustavo, teknoPLOF!. teknoPLOF! said: Algoritmos de redondeo http://bit.ly/bAEfaN […]
Echo de menos que se indique de qué modo aprovechan en su beneficio los bancos el redondeo. Por qué en media no es neutral o beneficia al cliente si no que les beneficia a ellos. Imagino que tiene que ver con lo que mencionas en el redondeo impar pero al contrario, que el 0.005 se redondea a 0 y no a 0.01.
@ aalku:
No lo he comentado porque se explica perfectamente en el artículo al que lleva el enlace que contiene esa frase en concreto.
Un saludo.
Algoritmos de redondeo.. Not so bad 🙂
El redondeo bancario sólo produce beneficios a la banca cuando se aplica sobre intereses (los porcentajes) a cobrar.
Me explico. Generalmente se necesitan muchos redondeos, pues en las operaciones se manejan varios decimales, pero a la hora de fijar el importe es cuando se produce el redondeo.
Si te dicen que te dan de interes el 4.5%, es ese interes el que te rinde y no otro. Lo mismo si el 4.5% es de interes deudor, te cobran el 4.5% y no otro interés distinto. Al aplicar el redondeo bancario o par lo que se consigue es balancear los redondeos de los importes de forma parecida al redondeo alterno. Lo repito: el redondeo que se aplica a los importes y tomando una gran cantidad de operaciones (ya que estadísticamente se balancearían las ocasiones en las que se redondea al alza con las que se redondea a la baja).
Sin embargo, cuando el redondeo se aplica sobre el interés que te van a cobrar (el Euribor más un diferencial sería el caso típico), este redondeo produce fácilmente grandes diferencias en el importe «teórico» (sin redondeo) al importe real. Además, siendo un poco calculador (y los bancos no saben de números…) es fácil dar con diferenciales que aseguren que no tocará en bastante tiempo un redondeo a la baja en el interés a aplicar.
Un saludo
Los supermercados y otros coirocmes usan para redondear sus ventas y evitar dar cambio por falta de monedas… Luego la diferencia te acreditan en la siguiente factura (para el caso de servicios pfablicos) o te sugieren donarlo para una entidad..