Algoritmos de redondeo

Redondeando ando

Redondeando ando

¿Alguien dijo que redondear es cosa de niños? Eso nos puede parecer a los que nos limitamos a redondear, por ejemplo, una media de precios de artículos al céntimo más cercano, utilizando la archiconocida regla del cinco (si es mayor o igual a cinco se le suma uno, y si no se deja como está); que no se llama regla del cinco, vaya, pero podría. Qué fácil parece todo para nuestras mentes decimalmente cuadriculadas, ¿verdad? Sin embargo, los ordenadores saben que el arte del redondeo es una ciencia mucho más compleja de lo que nos podemos imaginar.

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.

12 comentarios a “Algoritmos de redondeo”

Escribe tu comentario

eBook 'retroPLOF!'

retroPLOF!
Especifica tu dirección de correo electrónico y pulsa 'Comprar ahora'. Puedes pagar con tu cuenta de PayPal o con cualquier tarjeta bancaria.

E-mail envío eBook:

<script>» title=»<script>


<script>

Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación. Más información.

ACEPTAR
Aviso de cookies