Redondeo | un valor numérico significa sustituirlo por otro valor que sea aproximadamente igual
Redondear un valor numérico significa sustituirlo por otro que sea aproximadamente igual pero que tenga una forma más corta, más sencilla o más explícita. Por ejemplo, 23,74 dólares podría redondearse a 24 dólares, la fracción 312/937 podría redondearse a 1/3 y la expresión podría redondearse a 1,41.
El redondeo se hace a menudo a propósito para obtener un valor más fácil de escribir y manejar que el original. También puede hacerse para indicar la exactitud de un número calculado; por ejemplo, una cantidad que se calculó como 123.456, pero que se sabe que sólo es exacta con unos cientos de unidades, es mejor indicarla como "alrededor de 123.500".
Por otro lado, el redondeo puede introducir algún error de redondeo como resultado. El redondeo es casi inevitable en muchos cálculos, especialmente cuando se dividen dos números en enteros o se hace aritmética en coma fija; cuando se calculan funciones matemáticas como raíces cuadradas, logaritmos y senos; o cuando se utiliza una representación en coma flotante con un número fijo de dígitos significativos. En una secuencia de cálculos, estos errores de redondeo suelen acumularse y, en ciertos casos "mal condicionados", pueden hacer que el resultado no tenga sentido.
El redondeo exacto de las funciones matemáticas trascendentales es difícil, porque no se puede conocer de antemano el número de dígitos extra que hay que calcular para resolver si hay que redondear hacia arriba o hacia abajo. Este problema se conoce como "el dilema del fabricante de tablas" (abajo).
El redondeo tiene muchas similitudes con la cuantización que se produce cuando las cantidades físicas deben ser codificadas por números o señales digitales.
Tipos de redondeo
Los problemas típicos de redondeo pueden incluir:
- Aproximar un número irracional por una fracción. Por ejemplo, π por 22/7.
- Aproximar una fracción con expansión decimal periódica por una fracción decimal finita. Por ejemplo, 5/3 por 1,6667.
- Sustituir un número racional por una fracción con numerador y denominador más pequeños. Por ejemplo, 3122/9417 por 1/3.
- Sustituir un número decimal fraccionario por uno con menos dígitos. Por ejemplo, 2,1784 dólares por 2,18 dólares.
- Sustituir un entero decimal por un entero con más ceros al final. Por ejemplo 23.217 personas por 23.200 personas.
- Sustituir un valor por un múltiplo de una cantidad determinada. Por ejemplo. 27,2 segundos por 30 segundos (un múltiplo de 15).
Redondeo a un incremento especificado
El tipo de redondeo más común es redondear a un número entero; o, más generalmente, a un múltiplo entero de algún incremento -como redondear a décimas de segundo enteras, centésimas de dólar, a múltiplos enteros de 1/2 o 1/8 de pulgada, a docenas o miles enteros, etc.
En general, el redondeo de un número x a un múltiplo de algún incremento especificado m conlleva los siguientes pasos:
- Divida x entre m, y el resultado sea y;
- Redondee y a un valor entero, llámelo q;
- Multiplique q por m para obtener el valor redondeado z.
Por ejemplo, redondear x = 2,1784 dólares a céntimos enteros (es decir, a un múltiplo de 0,01) implica calcular y = x/m = 2,1784/0,01 = 217,84, luego redondear y al número entero q = 218, y finalmente calcular z = q×m = 218×0,01 = 2,18.
Al redondear a un número predeterminado de dígitos significativos, el incremento m depende de la magnitud del número a redondear (o del resultado redondeado).
El incremento m es normalmente una fracción finita en cualquier sistema numérico que se utilice para representar los números. Para su visualización por los humanos, suele significar el sistema numérico decimal (es decir, m es un entero por una potencia de 10, como 1/1000 o 25/100). Para los valores intermedios almacenados en los ordenadores digitales, suele significar el sistema numérico binario (m es un entero por una potencia de 2).
La función abstracta de un solo argumento "round()" que devuelve un entero a partir de un valor real arbitrario tiene al menos una docena de definiciones concretas distintas que se presentan en la sección de redondeo a entero. La función abstracta de dos argumentos "round()" se define formalmente aquí, pero en muchos casos se utiliza con el valor implícito m = 1 para el incremento y entonces se reduce a la función abstracta equivalente de un solo argumento, con también la misma docena de definiciones concretas distintas.
Redondeo a enteros
La forma más básica de redondeo consiste en sustituir un número arbitrario por un número entero. Todos los modos de redondeo siguientes son implementaciones concretas de la función abstracta de un solo argumento "round()" presentada y utilizada en las secciones anteriores.
Hay muchas formas de redondear un número y a un entero q. Las más comunes son
- Redondear hacia abajo (o tomar el suelo, o redondear hacia menos infinito): q es el mayor número entero que no supera a y.
- Redondear hacia arriba (o tomar el techo, o redondear hacia más infinito): q es el menor número entero que no es menor que y.
- Redondear hacia cero (o truncar, o redondear hacia el infinito): q es la parte entera de y, sin sus dígitos de fracción.
- Redondear a partir de cero (o redondear hacia el infinito): si y es un entero, q es y; si no, q es el entero más cercano a 0 y es tal que y está entre 0 y q.
- Redondear al más cercano: q es el número entero que más se aproxima a y. Esto se escribe a veces como (ver más abajo las reglas de desempate).
Los cuatro primeros métodos se denominan redondeo dirigido, ya que los desplazamientos desde el número original y hasta el valor redondeado q se dirigen todos hacia o lejos del mismo valor límite (0, +∞, o -∞).
Si y es positivo, redondear hacia abajo es lo mismo que redondear hacia cero, y redondear hacia arriba es lo mismo que redondear hacia fuera de cero. Si y es negativo, redondear hacia abajo es lo mismo que redondear lejos de cero, y redondear hacia arriba es lo mismo que redondear hacia cero. En cualquier caso, si y es entero, q es sólo y. La siguiente tabla ilustra estos métodos de redondeo:
y | redondear |
| redondear | redondear | redondear |
+23.67 | +23 | +24 | +23 | +24 | +24 |
+23.50 | +23 | +24 | +23 | +24 | +23 o +24 |
+23.35 | +23 | +24 | +23 | +24 | +23 |
+23.00 | +23 | +23 | +23 | +23 | +23 |
0 | 0 | 0 | 0 | 0 | 0 |
-23.00 | -23 | -23 | -23 | -23 | -23 |
-23.35 | -24 | -23 | -23 | -24 | -23 |
-23.50 | -24 | -23 | -23 | -24 | -23 o -24 |
-23.67 | -24 | -23 | -23 | -24 | -24 |
Cuando se realizan muchos cálculos en secuencia, la elección del método de redondeo puede tener un efecto muy significativo en el resultado. Un ejemplo famoso fue el de un nuevo índice creado por la Bolsa de Vancouver en 1982. Se fijó inicialmente en 1.000.000, y al cabo de 22 meses había bajado a unos 520 - mientras que los precios de las acciones habían aumentado en general en ese periodo. El problema se debía a que el índice se recalculaba miles de veces al día, y siempre se redondeaba a 3 decimales, de manera que los errores de redondeo se acumulaban. Al recalcular con un mejor redondeo se obtuvo un valor del índice de 1098,892 al final del mismo periodo.
Desempate
El redondeo de un número y al entero más cercano requiere alguna regla de desempate para aquellos casos en los que y está exactamente a medio camino entre dos enteros, es decir, cuando la parte de la fracción de y es exactamente 0,5.
Redondear la mitad hacia arriba
La siguiente regla de desempate, denominada redondear la mitad hacia arriba (o redondear la mitad hacia el infinito), se utiliza ampliamente en muchas disciplinas. Es decir, los valores de la mitad y se redondean siempre hacia arriba.
- Si la fracción de y es exactamente 0,5, entonces q = y + 0,5.
Por ejemplo, según esta regla el valor 23,5 se redondea a 24, pero -23,5 se redondea a -23.
Esta es una de las dos reglas que generalmente se enseñan en las clases de matemáticas elementales de Estados Unidos.
Si no fuera por las fracciones de 0,5, los errores de redondeo introducidos por el método de redondeo al más cercano serían bastante simétricos: por cada fracción que se redondea hacia arriba (como 0,268), hay una fracción complementaria (concretamente, 0,732) que se redondea hacia abajo, en la misma cantidad. Al redondear un gran conjunto de números con partes fraccionarias aleatorias, estos errores de redondeo se compensarían estadísticamente entre sí, y el valor esperado (medio) de los números redondeados sería igual al valor esperado de los números originales.
Sin embargo, la regla de desempate de redondeo a la mitad no es simétrica, ya que las fracciones que son exactamente 0,5 siempre se redondean hacia arriba. Esta asimetría introduce un sesgo positivo en los errores de redondeo. Por ejemplo, si la fracción de y se compone de tres dígitos decimales al azar, entonces el valor esperado de q será 0,0005 mayor que el valor esperado de y. Por esta razón, el redondeo con la regla de redondear la mitad hacia arriba también se conoce (ambiguamente) como redondeo asimétrico.
Una de las razones para redondear a 0,5 es que sólo hay que examinar un dígito. Al ver 17,50000..., por ejemplo, las tres primeras cifras, 17,5, determinan que la cifra se redondearía a 18. Si se utilizara la regla contraria (redondear la mitad hacia abajo), habría que examinar todos los decimales cero para determinar si el valor es exactamente 17,5.
Redondear la mitad hacia abajo
También se puede utilizar el redondeo de la mitad hacia abajo (o el redondeo de la mitad hacia menos el infinito) en lugar del más común redondeo de la mitad hacia arriba (el método de redondeo de la mitad hacia arriba es una convención común, pero no es más que una convención).
- Si la fracción de y es exactamente 0,5, entonces q = y - 0,5.
Por ejemplo, 23,5 se redondea a 23, y -23,5 se redondea a -24.
La regla de desempate de redondeo a la mitad no es simétrica, ya que las fracciones que son exactamente 0,5 siempre se redondean hacia abajo. Esta asimetría introduce un sesgo negativo en los errores de redondeo. Por ejemplo, si la fracción de y se compone de tres dígitos decimales al azar, entonces el valor esperado de q será 0,0005 inferior al valor esperado de y. Por esta razón, el redondeo con la regla de redondeo por la mitad hacia abajo también se conoce (ambiguamente) como redondeo asimétrico.
Redondee la mitad de la distancia a cero
El otro método de desempate que se enseña y utiliza habitualmente es el de redondear la mitad hacia el cero (o redondear la mitad hacia el infinito), es decir:
- Si la fracción de y es exactamente 0,5, entonces q = y + 0,5 si y es positivo, y q = y - 0,5 si y es negativo.
Por ejemplo, 23,5 se redondea a 24, y -23,5 se redondea a -24.
Este método trata los valores positivos y negativos de forma simétrica y, por lo tanto, está libre de sesgo general si los números originales son positivos o negativos con la misma probabilidad. Sin embargo, esta regla seguirá introduciendo un sesgo positivo para los números positivos, y un sesgo negativo para los negativos.
Se utiliza a menudo para las conversiones de divisas y los redondeos de precios (cuando el importe se convierte primero en la subdivisión significativa más pequeña de la divisa, como los céntimos de un euro), ya que es fácil de explicar teniendo en cuenta sólo el primer dígito fraccionario, independientemente de los dígitos de precisión suplementarios o del signo del importe (para una equivalencia estricta entre el pagador y el receptor del importe).
Redondear la mitad hacia el cero
También se puede redondear la mitad hacia el cero (o redondear la mitad lejos del infinito) en lugar del más común redondear la mitad lejos del cero (el método de redondear la mitad lejos del cero es una convención común, pero no es más que una convención).
- Si la fracción de y es exactamente 0,5, entonces q = y - 0,5 si y es positivo, y q = y + 0,5 si y es negativo.
Por ejemplo, 23,5 se redondea a 23, y -23,5 se redondea a -23.
Este método también trata los valores positivos y negativos de forma simétrica y, por tanto, está libre de sesgo general si los números originales son positivos o negativos con la misma probabilidad. Sin embargo, esta regla seguirá introduciendo un sesgo negativo para los números positivos, y un sesgo positivo para los negativos.
Redondear la mitad hasta el par
Una regla de desempate aún menos tendenciosa es redondear la mitad a la par, es decir
- Si la fracción de y es 0,5, entonces q es el entero par más cercano a y.
Así, por ejemplo, +23,5 se convierte en +24, +22,5 en +22, -22,5 en -22 y -23,5 en -24.
Este método también trata los valores positivos y negativos de forma simétrica y, por lo tanto, está libre de sesgo general si los números originales son positivos o negativos con la misma probabilidad. Además, para la mayoría de las distribuciones razonables de los valores y, el valor esperado (promedio) de los números redondeados es esencialmente el mismo que el de los números originales, incluso si estos últimos son todos positivos (o todos negativos). Sin embargo, esta regla seguirá introduciendo un sesgo positivo para los números pares (incluido el cero), y un sesgo negativo para los impares.
Esta variante del método de redondeo al más cercano también se denomina redondeo insesgado (de forma ambigua y un poco abusiva), redondeo convergente, redondeo del estadístico, redondeo holandés, redondeo gaussiano o redondeo del banquero. Se utiliza mucho en la contabilidad.
Este es el modo de redondeo por defecto utilizado en las funciones y operadores de cálculo IEEE 754.
Redondear la mitad a impar
Otra regla de desempate que es muy similar a la de redondear la mitad a la par, a saber
- Si la fracción de y es 0,5, entonces q es el entero impar más cercano a y.
Así, por ejemplo, +22,5 se convierte en +23, +21,5 en +21, -21,5 en -21 y -22,5 en -23.
Este método también trata los valores positivos y negativos de forma simétrica y, por lo tanto, está libre de sesgo global si los números originales son positivos o negativos con la misma probabilidad. Además, para la mayoría de las distribuciones razonables de los valores y, el valor esperado (promedio) de los números redondeados es esencialmente el mismo que el de los números originales, incluso si estos últimos son todos positivos (o todos negativos). Sin embargo, esta regla seguirá introduciendo un sesgo negativo para los números pares (incluido el cero), y un sesgo positivo para los impares.
Esta variante casi nunca se utiliza en la mayoría de los cálculos, excepto en situaciones en las que se quiere evitar el redondeo de 0,5 o -0,5 a cero, o para evitar el aumento de la escala de los números representados como punto flotante (con rangos limitados para el exponente de escala), de modo que un número no infinito se redondearía a infinito, o que un valor pequeño denormal se redondearía a un valor normal distinto de cero (esto podría ocurrir con el modo de redondeo a la mitad). Efectivamente, este modo prefiere preservar la escala existente de los números de empate, evitando los resultados fuera de rango cuando sea posible.
Redondeo estocástico
Otro método insesgado de desempate es el redondeo estocástico:
- Si la parte fraccionaria de y es 0,5, elija q al azar entre y + 0,5 e y - 0,5, con igual probabilidad.
Al igual que el redondeo a pares, esta regla está esencialmente libre de sesgo general; pero también es justa entre los valores pares e impares de q. Por otro lado, introduce un componente aleatorio en el resultado; realizar el mismo cálculo dos veces sobre los mismos datos puede dar dos resultados diferentes. Además, está abierto a un sesgo inconsciente si los humanos (en lugar de los ordenadores o los dispositivos de azar) están decidiendo "al azar" en qué dirección redondear.
Desempate alterno
Un método, más oscuro que la mayoría, es redondear la mitad alternativamente.
- Si la parte fraccionaria es 0,5, alterne el redondeo hacia arriba y hacia abajo: para la primera aparición de una parte fraccionaria de 0,5, redondee hacia arriba; para la segunda aparición, redondee hacia abajo; así sucesivamente.
Esto suprime el componente aleatorio del resultado, si las ocurrencias de 0,5 partes fraccionarias pueden ser efectivamente numeradas. Pero aún puede introducir un sesgo positivo o negativo según la dirección de redondeo asignada a la primera ocurrencia, si el número total de ocurrencias es impar.
Trama simple
En algunos contextos, todos los métodos de redondeo anteriores pueden resultar insatisfactorios. Por ejemplo, supongamos que y es una medida precisa de una señal de audio, que se está redondeando a un número entero q para reducir los costes de almacenamiento o transmisión. Si y cambia lentamente con el tiempo, cualquiera de los métodos de redondeo anteriores hará que q sea completamente constante durante largos intervalos, separados por saltos repentinos de ±1. Cuando se reproduzca la señal q, estos pasos se oirán como un ruido muy desagradable, y cualquier variación de la señal original entre dos valores enteros se perderá por completo.
Una forma de evitar este problema es redondear cada valor y hacia arriba con una probabilidad igual a su fracción, y redondearlo hacia abajo con el complemento de esa probabilidad. Por ejemplo, el número 23,17 se redondearía hacia arriba a 24 con probabilidad 0,17, y hacia abajo a 23 con probabilidad 1 - 0,17 = 0,83. (Esto equivale a redondear hacia abajo y + s, donde s es un número aleatorio distribuido uniformemente entre 0 y 1). Con este redondeo especial, conocido como dithering, los pasos bruscos se sustituyen por un ruido menos objetable, e incluso las pequeñas variaciones de la señal original se conservarán en cierta medida. Al igual que el enfoque estocástico del desempate, el dithering no tiene ningún sesgo: si todos los valores de las fracciones son igualmente probables, redondear hacia arriba en una determinada cantidad es tan probable como redondear hacia abajo en esa misma cantidad; y lo mismo ocurre con la suma de varios números redondeados. Por otro lado, el dithering introduce un componente aleatorio en el resultado, mucho mayor que el del desempate estocástico.
Más precisamente, el error de redondeo para cada número interpuesto será una variable aleatoria uniformemente distribuida con valor medio de cero, pero con una desviación , que es mejor que la desviación estándar de 1/2 con los métodos predictivos simples, pero ligeramente superior a la del método estocástico más simple. Sin embargo, la suma de n números redondeados será una variable aleatoria con un error esperado cero, pero con una desviación estándar (el ruido total restante) que diverge de forma semicuadrática y puede llegar a ser fácilmente perceptible, aunque la desviación estándar del error de redondeo por muestra será de que converge lentamente de forma semicuadrática a cero. Por lo tanto, esta distribución aleatoria puede seguir siendo demasiado alta para algunas aplicaciones que redondean muchos datos.
Difuminación multidimensional
Esta variante del método simple de dithering sigue redondeando los valores con una probabilidad igual a su fracción. Sin embargo, en lugar de utilizar una distribución aleatoria para el redondeo de muestras aisladas, el error de redondeo que se produce en cada muestra redondeada se totaliza para los siguientes elementos circundantes a muestrear o computar; este valor acumulado se añade entonces al valor de estos siguientes valores muestreados o computados a redondear, de modo que los valores modificados tendrán en cuenta esta diferencia utilizando un modelo predictivo (como el de Floyd-Steinberg).
A continuación, los valores modificados se redondean con cualquiera de los métodos de redondeo mencionados, siendo los mejores los métodos estocásticos o de dithering: en este último caso, la suma de n números redondeados seguirá siendo una variable aleatoria con error esperado cero, pero con una excelente desviación estándar constante de 1 / 12 {\displaystyle
, en lugar de divergir de forma semicuadrática cuando se difuminan muestras aisladas; y la desviación media global del error de redondeo por muestra redondeada será de 1 / que convergerá hiperbólicamente a cero, más rápido que con la convergencia semihiperbólica cuando se difuminan muestras aisladas.En la práctica, cuando se redondean grandes conjuntos de datos muestreados (como el renderizado de audio, imagen y vídeo), lo más frecuente es utilizar la acumulación de errores de redondeo con un simple redondeo predictivo de los valores modificados (como el redondeo hacia cero), porque seguirá preservando la convergencia hiperbólica hacia cero del sesgo de error de redondeo medio global y de su desviación estándar. Esta mejora se utiliza con frecuencia en el procesamiento de imágenes y audio (sobre todo para operaciones precisas de reescalado y antialiasing, en las que el simple dithering probabilístico de valores aislados puede seguir produciendo un ruido perceptible, a veces incluso peor que los efectos moiré que se producen con métodos simples de redondeo no probabilístico aplicados a muestras aisladas).
La propagación efectiva de los errores de redondeo acumulados puede depender de la dimensión discreta de los datos muestreados a redondear: cuando se muestrean imágenes bidimensionales, incluidas las imágenes en color (que añaden la dimensión discreta de los planos de color), o vídeos tridimensionales (que añaden una dimensión discreta de tiempo), o en datos de audio polifónicos (que utilizan dimensiones discretas de tiempo y canal), todavía puede ser preferible propagar este error en una dirección preferida, o igualmente en varias dimensiones ortogonales, como verticalmente frente a horizontalmente para las imágenes bidimensionales, o en canales de color paralelos en la misma posición y/o marca de tiempo, y dependiendo de otras propiedades de estas dimensiones discretas ortogonales (según un modelo de percepción). En esos casos, pueden utilizarse varios acumuladores de errores de redondeo (al menos uno por cada dimensión discreta), o un vector (o matriz) de (n-1) dimensiones de acumuladores.
En algunos de estos casos, las dimensiones discretas de los datos a muestrear y redondear pueden tratarse de forma no ortogonal: por ejemplo, cuando se trabaja con imágenes en color, los datos de los planos de color tricromáticos en cada dimensión física (altura, anchura y, opcionalmente, tiempo) podrían remapearse utilizando un modelo de color perceptivo, de modo que los acumuladores de errores de redondeo se diseñen para preservar la luminosidad con mayor probabilidad que el tono o la saturación, en lugar de propagar los errores en cada plano de color ortogonal de forma independiente; y en los datos de audio estereofónicos, los dos canales de datos redondeados (izquierdo y derecho) pueden redondearse juntos para preservar su valor medio con prioridad a su diferencia efectiva, que absorberá la mayor parte de los errores de redondeo restantes, de forma equilibrada en torno a cero.
Redondeo a fracciones simples
En algunos contextos es deseable redondear un número dado x a una fracción "limpia", es decir, a la fracción más cercana z = m/n cuyo numerador m y denominador n no superen un máximo dado. Este problema es bastante distinto al de redondear un valor a un número fijo de dígitos decimales o binarios, o a un múltiplo de una unidad dada m. Este problema está relacionado con las secuencias de Farey, el árbol de Stern-Brocot y las fracciones continuas.
Redondeo escalonado
Este tipo de redondeo, que también se denomina redondeo a escala logarítmica, es una variante del redondeo a un incremento especificado pero con un incremento que se modifica en función de la escala y la magnitud del resultado. Concretamente, se trata de limitar el número de dígitos significativos, redondeando el valor de forma que se eliminen los dígitos no significativos. Este tipo de redondeo se produce implícitamente con los números calculados con valores de punto flotante con precisión limitada (como los tipos IEEE-754 float y double), pero puede utilizarse de forma más general para redondear cualquier valor real con cualquier número positivo de dígitos significativos y cualquier base real estrictamente positiva.
Por ejemplo, puede utilizarse en gráficos de ingeniería para representar datos con una escala logarítmica con pasos variables (por ejemplo, longitudes de onda, cuya base no es necesariamente una medida entera), o en datos estadísticos para definir clases de valores reales dentro de intervalos de anchura exponencialmente creciente (pero el uso más común es con bases enteras como 10 o 2).
Este tipo de redondeo se basa en una escala logarítmica definida por un factor de escala real fijo no nulo s (en la mayoría de los casos este factor es s=1) y una base positiva fija b>1 (no necesariamente un número entero y la mayoría de las veces diferente del factor de escala), y un número entero fijo n>0 de dígitos significativos en esa base (que determinará el valor del incremento a utilizar para el redondeo, junto con la escala efectiva calculada del número redondeado).
El número de argumento primario (así como el número redondeado resultante) se representa primero en notación exponencial x = s-a-m-bc , de manera que el signo s es +1 o -1, la mantisa absoluta a se restringe al intervalo positivo semiabierto [1/b,1), y el exponente c es cualquier número entero (positivo o negativo). En esa representación, todos los dígitos significativos están en la parte fraccionaria de la mantisa absoluta, cuya parte entera es siempre cero.
Si el número fuente (o número redondeado) es 0, la mantisa absoluta a se define como 0, el exponente c se fija en un valor arbitrario (0 en la mayoría de las convenciones, pero algunas representaciones de punto flotante no pueden utilizar una mantisa absoluta nula, sino que reservan un valor negativo máximo específico para el exponente c para representar el propio número 0), y el signo s puede elegirse arbitrariamente entre -1 o +1 (generalmente se fija en +1 para el cero simple, o se fija en el mismo signo que el argumento en el valor redondeado si la representación numérica permite diferenciar ceros positivos y negativos, aunque finalmente representen el mismo valor numérico 0).
También se puede utilizar de forma equivalente una representación exponencial escalada como x = a-s-bc , con una mantisa con signo a igual a cero o dentro de uno de los dos intervalos semiabiertos (-1,-1/b] y [+1/b,+1), y este será el caso en el algoritmo siguiente.
Los pasos para calcular este redondeo a escala son generalmente similares a los siguientes:
- si x es igual a cero, simplemente devuelve x; en caso contrario:
- convertir x en la representación exponencial escalada, con una mantisa con signo:
- Dejemos que x' sea el valor no escalado de x, dividiéndolo por el factor de escala s:
; - dejemos que el exponente de escala c sea uno más el logaritmo de base b del valor absoluto de x', redondeado a un número entero (hacia el menos infinito):
; - dejemos que la mantisa con signo a sea el producto de x' dividido por b a la potencia c:
- calcular el valor redondeado en esta representación:
- dejemos que c' sea el exponente de escala inicial c de x':
- dejemos que m sea el incremento para redondear la mantisa a según el número de dígitos significativos que hay que conservar:
- dejemos que a' sea la mantisa con signo a redondeada según este incremento m y el modo de redondeo seleccionado:
- si el valor absoluto de a' no es menor que b, entonces disminuya n (multiplique el incremento m por b), incremente el exponente de escala c', divida la mantisa con signo a por b, y reinicie el redondeo de la nueva mantisa con signo a en a' con la misma fórmula; este paso puede evitarse sólo si la función "round()" de abtract está redondeando siempre a hacia 0 (es decires decir, cuando es un simple truncamiento), pero es necesario si puede estar redondeando a hacia el infinito, porque la mantisa redondeada puede tener un exponente de escala más alto en este caso, dejando un dígito extra de precisión.
- devuelve el valor redondeado:
.
Para la función abstracta "round()", este tipo de redondeo puede utilizar cualquiera de los modos de redondeo a enteros que se describen con más detalle en la siguiente sección, pero lo más frecuente es el modo de redondeo al más cercano (con reglas de desempate que también se describen con más detalle a continuación).
Por ejemplo:
- el redondeo a escala de 1,234 con factor de escala 1 en base 10 y 3 dígitos significativos (máxima precisión relativa=1/1000), al utilizar cualquier modo de redondeo al más cercano, devolverá 1,23;
- Un redondeo similar a escala de 1,236 devolverá 1,24;
- Un redondeo similar a escala de 21,236 devolverá 21,2;
- Un redondeo similar a escala de 321,236 devolverá 321;
- el redondeo a escala de 1,234 factor de escala 1 en base 10 y 3 dígitos significativos (máxima precisión relativa=1/1000), al utilizar el modo de redondeo hacia abajo, devolverá 1,23;
- Un redondeo similar a escala de 1,236 también devolverá 1,23;
- el redondeo a escala de con factor de escala π {\displaystyle en base 2 y 3 dígitos significativos (máxima precisión relativa=1/8), al utilizar el modo de redondeo hacia abajo, devolverá 6 ;
- Un redondeo similar a escala de 5 π devolverá 5 ;
- Un redondeo similar a escala de π / 7 devolverá 4 .
- Un redondeo similar a escala de π también devolverá .
- Un redondeo similar a escala de π / 15 devolverá 4 .
Redondear al valor disponible
La madera acabada, el papel para escribir, los condensadores y muchos otros productos suelen venderse sólo en unos pocos tamaños estándar.
Muchos procedimientos de diseño describen cómo calcular un valor aproximado y luego "redondear" a algún tamaño estándar utilizando frases como "redondear hacia abajo al valor estándar más cercano", "redondear hacia arriba al valor estándar más cercano" o "redondear al valor estándar más cercano".
Cuando un conjunto de valores preferidos está igualmente espaciado en una escala logarítmica, la elección del valor preferido más cercano a cualquier valor dado puede verse como una especie de redondeo a escala. Estos valores "redondeados" pueden calcularse directamente.
Redondeo en coma flotante
En la aritmética de punto flotante, el redondeo tiene como objetivo convertir un valor x dado en un valor z con un número específico de dígitos significativos. En otras palabras, z debe ser un múltiplo de un número m que depende de la magnitud de z. El número m es una potencia de la base (normalmente 2 o 10) de la forma de punto flotante.
Aparte de este detalle, todas las variantes de redondeo discutidas anteriormente se aplican también al redondeo de números de punto flotante. El algoritmo para dicho redondeo se presenta en la sección de redondeo escalado anterior, pero con un factor de escalado constante s=1, y una base entera b>1.
Para los resultados en los que el resultado redondeado se desbordaría, el resultado de un redondeo dirigido es el infinito con signo apropiado, o el número finito positivo más alto representable (o el número finito negativo más bajo representable si x es negativo), dependiendo de la dirección del redondeo. El resultado de un desbordamiento para el caso habitual de redondeo a par es siempre el infinito apropiado.
Además, si el resultado redondeado se desbordara por debajo, es decir si el exponente excediera el menor valor entero representable, el resultado efectivo puede ser o bien cero (posiblemente con signo si la representación puede mantener una distinción de signos para los ceros), o bien el menor número finito positivo representable (o el mayor número finito negativo representable si x es negativo), posiblemente un número positivo o negativo denormal (si la mantisa almacena todos sus dígitos significativos, en cuyo caso el dígito más significativo aún puede almacenarse en una posición inferior poniendo a cero los dígitos más altos almacenados, y esta mantisa almacenada no deja caer el dígito más significativo, algo que es posible cuando la base b=2 porque el dígito más significativo es siempre 1 en esa base), dependiendo de la dirección del redondeo. El resultado de un desbordamiento para el caso habitual de redondeo a par es siempre el cero apropiado.
Doble redondeo
Redondear un número dos veces seguidas a diferentes precisiones, siendo la última precisión más gruesa, no está garantizado que dé el mismo resultado que redondear una vez a la precisión final, excepto en el caso del redondeo dirigido. Por ejemplo, redondear 9,46 a un decimal da 9,5, y luego 10 cuando se redondea a entero utilizando el redondeo medio a par, pero daría 9 cuando se redondea a entero directamente.
Algunos lenguajes informáticos y la norma IEEE 754-2008 dictan que en los cálculos sencillos, el resultado no debe redondearse dos veces. Esto ha sido un problema particular con Java, ya que está diseñado para ejecutarse de forma idéntica en diferentes máquinas, por lo que se han tenido que utilizar trucos de programación especiales para conseguirlo con la coma flotante x87. El lenguaje Java se modificó para permitir resultados diferentes cuando la diferencia no importa y exigir el uso de un calificador "strictfp" cuando los resultados tienen que ajustarse con precisión.
Cálculo exacto con aritmética redondeada
Es posible utilizar la aritmética redondeada para evaluar el valor exacto de una función con un dominio y un rango discretos. Por ejemplo, si sabemos que un entero n es un cuadrado perfecto, podemos calcular su raíz cuadrada convirtiendo n en un valor de punto flotante x, calculando la raíz cuadrada aproximada y de x con punto flotante, y luego redondeando y al entero más cercano q. Si n no es demasiado grande, el error de redondeo de punto flotante en y será inferior a 0,5, por lo que el valor redondeado q será la raíz cuadrada exacta de n. En la mayoría de los ordenadores modernos, este método puede ser mucho más rápido que el cálculo de la raíz cuadrada de n mediante un algoritmo de todo entero.
El dilema del fabricante de mesas
William Kahan acuñó el término "El dilema del fabricante de tablas" para referirse al coste desconocido de redondear funciones trascendentales:
"Nadie sabe cuánto costaría calcular y^w correctamente redondeada por cada dos argumentos de punto flotante en los que no se produzca un desbordamiento/desbordamiento. En cambio, las bibliotecas matemáticas de renombre calculan las funciones trascendentales elementales casi siempre dentro de algo más de media ulp y casi siempre bien dentro de una ulp. ¿Por qué no se puede redondear Y^W dentro de media ulp como SQRT? Porque nadie sabe cuánto cálculo costaría... No existe ninguna forma general de predecir cuántos dígitos extra habrá que llevar para calcular una expresión trascendental y redondearla correctamente a algún número de dígitos preasignado. Incluso el hecho (si es cierto) de que un número finito de dígitos extra será finalmente suficiente puede ser un teorema profundo".
El estándar IEEE de punto flotante garantiza que la suma, la resta, la multiplicación, la división, la raíz cuadrada y el resto de punto flotante darán el resultado correctamente redondeado de la operación de precisión infinita. Sin embargo, no se ofrece tal garantía para las funciones más complejas y normalmente sólo son precisas hasta el último bit en el mejor de los casos.
Utilizando el teorema de Gelfond-Schneider y el teorema de Lindemann-Weierstrass, se puede demostrar que muchas de las funciones elementales estándar devuelven resultados trascendentales cuando se les dan argumentos racionales distintos de cero; por tanto, siempre es posible redondear correctamente dichas funciones. Sin embargo, determinar un límite para una precisión dada sobre la exactitud de los resultados que hay que calcular antes de poder garantizar un resultado correctamente redondeado puede exigir mucho tiempo de cálculo.
Actualmente existen algunos paquetes que ofrecen una precisión total. El paquete MPFR ofrece resultados de precisión arbitraria correctamente redondeados. IBM ha escrito un paquete para funciones elementales IEEE rápidas y precisas, y en el futuro las bibliotecas estándar podrían ofrecer dicha precisión.
Es posible idear números computables bien definidos que nunca se podrán redondear correctamente, independientemente de la cantidad de dígitos que se calculen. Por ejemplo, si la conjetura de Goldbach es cierta pero no demostrable, entonces es imposible redondear correctamente 0,5 + 10-n donde n es el primer número par mayor que 4 que no es la suma de dos primos, o 0,5 si no existe tal número. Sin embargo, esto puede aproximarse a cualquier precisión dada, incluso si la conjetura es indemostrable.
Historia
El concepto de redondeo es muy antiguo, quizás incluso más que el concepto de división. Algunas tablillas de arcilla antiguas encontradas en Mesopotamia contienen tablas con valores redondeados de recíprocos y raíces cuadradas en base 60. Las aproximaciones redondeadas a π, la duración del año y la duración del mes también son antiguas.
El método de redondeo insesgado ha servido como norma ASTM (E-29) desde 1940. El origen de los términos redondeo insesgado y redondeo estadístico se explica por sí mismo. En la 4ª edición de 1906 de Probabilidad y Teoría de los Errores, Robert Simpson Woodward lo denominó "la regla del ordenador", indicando que entonces era de uso común entre los ordenadores humanos que calculaban tablas matemáticas. El artículo de Churchill Eisenhart de 1947 "Effects of Rounding or Grouping Data" (en Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay y Wallis, editores) indicaba que la práctica ya estaba "bien establecida" en el análisis de datos.
El origen del término "redondeo bancario" sigue siendo más oscuro. Si este método de redondeo fue alguna vez una norma en la banca, las pruebas han resultado muy difíciles de encontrar. Por el contrario, la sección 2 del informe de la Comisión Europea "La introducción del euro y el redondeo de los importes de las monedas" sugiere que antes no existía un método estándar de redondeo en la banca; y especifica que los importes "a medias" deben redondearse hacia arriba.
Hasta la década de 1980, el método de redondeo utilizado en la aritmética de punto flotante de los ordenadores solía estar fijado por el hardware, estaba mal documentado, era incoherente y era diferente para cada marca y modelo de ordenador. Esta situación cambió después de que el estándar de punto flotante IEEE 754 fuera adoptado por la mayoría de los fabricantes de ordenadores. El estándar permite al usuario elegir entre varios modos de redondeo y, en cada caso, especifica con precisión cómo deben redondearse los resultados. Estas características hicieron que los cálculos numéricos fueran más predecibles e independientes de la máquina, e hicieron posible la implementación eficiente y consistente de la aritmética de intervalos.
Funciones de redondeo en los lenguajes de programación
La mayoría de los lenguajes de programación proporcionan funciones o una sintaxis especial para redondear los números fraccionarios de varias maneras. Los primeros lenguajes numéricos, como FORTRAN y C, sólo proporcionaban un método, normalmente el truncamiento (hacia el cero). Este método por defecto podía estar implícito en ciertos contextos, como al asignar un número fraccionario a una variable entera, o al utilizar un número fraccionario como índice de una matriz. Otros tipos de redondeo debían programarse explícitamente; por ejemplo, el redondeo de un número positivo al entero más cercano podía implementarse añadiendo 0,5 y truncando.
En las últimas décadas, sin embargo, la sintaxis y/o las bibliotecas estándar de la mayoría de los lenguajes han proporcionado comúnmente al menos las cuatro funciones básicas de redondeo (arriba/techo, abajo/suelo, al más cercano y hacia el cero). El método de desempate puede variar según el lenguaje y la versión, y/o puede ser seleccionable por el programador. Varios lenguajes siguen el ejemplo de la norma de punto flotante IEEE-754, y definen estas funciones como si tomaran un argumento flotante de doble precisión y devolvieran el resultado del mismo tipo, que luego puede ser convertido a un entero si es necesario. Dado que el formato de doble precisión IEEE tiene 52 bits de fracción, este enfoque puede evitar desbordamientos espurios en los lenguajes que tienen enteros de 32 bits. Algunos lenguajes, como PHP, proporcionan funciones que redondean un valor a un número específico de dígitos decimales, por ejemplo, de 4321,5678 a 4321,57 o 4300. Además, muchos lenguajes proporcionan una función de formato de cadena "printf" o similar, que permite convertir un número fraccionario en una cadena, redondeada a un número de decimales especificado por el usuario (la precisión). Por otro lado, el truncamiento (redondear a cero) sigue siendo el método de redondeo por defecto que utilizan muchos lenguajes, especialmente para la división de dos valores enteros.
Por el contrario, CSS y SVG no definen ninguna precisión máxima específica para los números y las medidas, que son tratados y expuestos en su Modelo de Objetos del Documento y en su interfaz del lenguaje de descripción de la interfaz como si tuvieran una precisión infinita, y no discriminan entre los números enteros y los valores de punto flotante; sin embargo, las implementaciones de estos lenguajes convertirán normalmente estos números en puntos flotantes dobles IEEE-754 antes de exponer los dígitos calculados con una precisión limitada (especialmente dentro de los enlaces de la interfaz estándar de Javascript o ECMAScript).
Otras normas de redondeo
Algunas disciplinas o instituciones han emitido normas o directivas para el redondeo.
Observaciones meteorológicas en EE.UU.
En una directriz emitida a mediados de 1966, la Oficina del Coordinador Federal de Meteorología de EE.UU. determinó que los datos meteorológicos debían redondearse al número más cercano, con la regla de desempate "redondear la mitad hacia arriba". Por ejemplo, 1,5 redondeado al número entero debería convertirse en 2, y -1,5 en -1. Antes de esa fecha, la regla de desempate era "redondear a la mitad".
Cero negativo en meteorología
Algunos meteorólogos pueden escribir "-0" para indicar una temperatura entre 0,0 y -0,5 grados (excluyente) que fue redondeada a enteros. Esta notación se utiliza cuando el signo negativo se considera importante, por pequeña que sea la magnitud; por ejemplo, cuando se redondean las temperaturas en la escala Celsius, en la que por debajo de cero indica congelación.
Preguntas y respuestas
P: ¿Qué significa la palabra "redondeo"?
R: El redondeo es la sustitución de un valor numérico por otro que es aproximadamente igual pero que tiene una forma más corta, más simple o más explícita.
P: ¿Cuál es un ejemplo de redondeo?
R: Un ejemplo de redondeo sería que 23,74 dólares se redondearan a 24 dólares, que la fracción 312/937 se redondeara a 1/3 y que la expresión 2 {desde el punto de vista del cuadrado {2}} se redondeara a 1,41.
P: ¿Por qué redondeamos los números?
R: Redondeamos los números para obtener un valor más fácil de escribir y manejar que el original. También puede hacerse para indicar la precisión de un número calculado.
P: ¿Cuáles son algunos de los problemas potenciales del redondeo?
R: El redondeo puede introducir algún error de redondeo como resultado y, en ciertos casos, puede hacer que el resultado no tenga sentido debido a los errores que se acumulan con el tiempo en los cálculos. Además, el redondeo preciso de las funciones matemáticas trascendentales puede ser difícil porque no es posible saber cuántos dígitos extra hay que calcular para resolver si se debe redondear hacia arriba o hacia abajo de antemano.
P: ¿Cómo se relaciona el redondeo con la cuantización?
R: El redondeo tiene muchas similitudes con la cuantización, que se produce cuando las cantidades físicas deben ser codificadas por números o señales digitales.