Redondear o redondear significa reemplazar un número por un valor aproximado que tenga una representación más corta, más simple o más explícita. Por ejemplo, reemplazar $ 23.4476 por $ 23.45 , la fracción 312/937 por 1/3 o la expresión √2 por 1.414 .
El redondeo se realiza a menudo para obtener un valor que sea más fácil de informar y comunicar que el original. El redondeo también puede ser importante para evitar una información engañosamente precisa de un número calculado, una medición o una estimación; por ejemplo, una cantidad que se calculó como 123456 pero que se sabe que es precisa solo con un margen de unos pocos cientos de unidades, normalmente se expresa mejor como "aproximadamente 123500 ".
Por otra parte, el redondeo de números exactos introducirá algún error de redondeo en el resultado informado. El redondeo es casi inevitable cuando se informan muchos cálculos, especialmente cuando se dividen dos números en aritmética de enteros o de punto fijo ; cuando se calculan funciones matemáticas como raíces cuadradas , logaritmos y senos ; o cuando se utiliza una representación de punto flotante con un número fijo de dígitos significativos . En una secuencia de cálculos, estos errores de redondeo generalmente se acumulan y, en ciertos casos mal condicionados, pueden hacer que el resultado carezca de sentido.
El redondeo preciso de funciones matemáticas trascendentales es difícil porque no se puede saber de antemano la cantidad de dígitos adicionales que se deben calcular para decidir si se debe redondear hacia arriba o hacia abajo. Este problema se conoce como "el dilema del fabricante de tablas".
El redondeo tiene muchas similitudes con la cuantificación que ocurre cuando las cantidades físicas deben codificarse mediante números o señales digitales .
A veces se utiliza un signo igual ondulado ( ≈ , aproximadamente igual a ) para indicar el redondeo de números exactos, p. ej. 9,98 ≈ 10. Este signo fue introducido por Alfred George Greenhill en 1892. [1]
Las características ideales de los métodos de redondeo incluyen:
Como normalmente no es posible que un método satisfaga todas las características ideales, existen muchos métodos de redondeo diferentes.
Como regla general, el redondeo es idempotente ; [2] es decir, una vez que se ha redondeado un número, redondearlo nuevamente a la misma precisión no cambiará su valor. Las funciones de redondeo también son monótonas ; es decir, redondear dos números a la misma precisión absoluta no intercambiará su orden (pero puede dar el mismo valor). En el caso general de un rango discreto, son funciones constantes por partes .
Los problemas de redondeo típicos incluyen:
La forma más básica de redondeo es reemplazar un número arbitrario por un entero. Todos los modos de redondeo siguientes son implementaciones concretas de un procedimiento abstracto "round()" de un solo argumento. Se trata de funciones verdaderas (con excepción de aquellas que utilizan aleatoriedad).
Estos cuatro métodos se denominan redondeo dirigido a un número entero , ya que los desplazamientos desde el número original x hasta el valor redondeado y están todos dirigidos hacia o desde el mismo valor límite (0, +∞ o −∞). El redondeo dirigido se utiliza en aritmética de intervalos y suele ser necesario en los cálculos financieros.
Si x es positivo, redondear hacia abajo es lo mismo que redondear hacia cero, y redondear hacia arriba es lo mismo que redondear hacia afuera desde cero. Si x es negativo, redondear hacia abajo es lo mismo que redondear hacia afuera desde cero, y redondear hacia arriba es lo mismo que redondear hacia cero. En cualquier caso, si x es un número entero, y es simplemente x .
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 Valores de Vancouver en 1982. Inicialmente se fijó en 1000.000 (tres decimales de precisión) y después de 22 meses había caído a aproximadamente 520, aunque el mercado parecía estar subiendo. El problema se debía a que el índice se recalculaba miles de veces al día y siempre se truncaba (redondeaba hacia abajo) a 3 decimales, de tal manera que los errores de redondeo se acumulaban. Al recalcular el índice para el mismo período utilizando el redondeo a la milésima más cercana en lugar del truncamiento, se corrigió el valor del índice de 524.811 a 1098.892. [3]
Para los ejemplos siguientes, sgn( x ) se refiere a la función de signo aplicada al número original, x .
Se puede redondear hacia abajo (o tomar el suelo , o redondear hacia el infinito negativo ): y es el entero más grande que no excede x .
Por ejemplo, 23,7 se redondea a 23 y −23,2 se redondea a −24.
También se puede redondear hacia arriba (o tomar el techo , o redondear hacia el infinito positivo ): y es el entero más pequeño que no es menor que x .
Por ejemplo, 23,2 se redondea a 24 y −23,7 se redondea a −23.
También se puede redondear hacia cero (o truncar , o redondear desde el infinito ): y es el número entero más cercano a x tal que esté entre 0 y x (incluido); es decir, y es la parte entera de x , sin sus dígitos fraccionarios.
Por ejemplo, 23,7 se redondea a 23 y −23,7 se redondea a −23.
También se puede redondear desde cero (o redondear hacia el infinito ): y es el número entero más cercano a 0 (o equivalentemente, a x ) tal que x está entre 0 e y (incluido).
Por ejemplo, 23,2 se redondea a 24 y −23,2 se redondea a −24.
Estos seis métodos se denominan redondeo al entero más próximo . Para redondear un número x al entero más próximo se requiere una regla de desempate para aquellos casos en los que x está exactamente a mitad de camino entre dos enteros, es decir, cuando la parte fraccionaria de x es exactamente 0,5.
Si no fuera por las 0,5 partes fraccionarias, los errores de redondeo introducidos por el método de redondeo al más cercano serían simétricos: por cada fracción que se redondea hacia abajo (como 0,268), hay una fracción complementaria (es decir, 0,732) que se redondea hacia arriba en la misma cantidad.
Al redondear un conjunto grande de números de punto fijo con partes fraccionarias distribuidas uniformemente , los errores de redondeo de todos los valores, con la omisión de aquellos que tienen una parte fraccionaria de 0,5, se compensarían estadísticamente entre sí. Esto significa que el valor esperado (promedio) de los números redondeados es igual al valor esperado de los números originales cuando se eliminan del conjunto los números con una parte fraccionaria de 0,5.
En la práctica, normalmente se utilizan números de punto flotante , que tienen aún más matices computacionales porque no están espaciados de manera uniforme.
Se puede redondear la mitad hacia arriba (o redondear la mitad hacia el infinito positivo ), una regla de desempate que se usa ampliamente en muchas disciplinas. [ cita requerida ] Es decir, los valores intermedios de x siempre se redondean hacia arriba. Si la parte fraccionaria de x es exactamente 0,5, entonces y = x + 0,5
Por ejemplo, 23,5 se redondea a 24 y −23,5 se redondea a −23.
Algunos lenguajes de programación (como Java y Python) usan "mitad arriba" para referirse a redondear la mitad alejándose de cero en lugar de redondear la mitad hacia el infinito positivo . [4] [5]
Este método solo requiere verificar un dígito para determinar la dirección de redondeo en el complemento a dos y representaciones similares.
También se puede redondear la mitad hacia abajo (o redondear la mitad hacia el infinito negativo ) en lugar de redondear la mitad hacia arriba , como es más habitual . Si la parte fraccionaria de x es exactamente 0,5, entonces y = x − 0,5
Por ejemplo, 23,5 se redondea a 23 y −23,5 se redondea a −24.
Algunos lenguajes de programación (como Java y Python) utilizan "mitad hacia abajo" para referirse a redondear la mitad hacia cero en lugar de redondear la mitad hacia el infinito negativo . [4] [5]
También se puede redondear la mitad hacia cero (o redondear la mitad alejándose del infinito ) en lugar de redondear la mitad alejándose del cero de manera convencional . Si la parte fraccionaria de x es exactamente 0,5, entonces y = x − 0,5 si x es positivo, e y = x + 0,5 si x es negativo.
Por ejemplo, 23,5 se redondea a 23 y −23,5 se redondea a −23.
Este método trata los valores positivos y negativos de manera simétrica y, por lo tanto, no tiene sesgo positivo/negativo general si los números originales son positivos o negativos con la misma probabilidad. Sin embargo, sigue teniendo sesgo hacia el cero.
También se puede redondear la mitad a partir de cero (o redondear la mitad hacia el infinito ), una regla de desempate que se enseña y se usa comúnmente, a saber: si la parte fraccionaria de x es exactamente 0,5, entonces y = x + 0,5 si x es positivo, e y = x − 0,5 si x es negativo.
Por ejemplo, 23,5 se redondea a 24 y −23,5 se redondea a −24.
Esto puede ser más eficiente en computadoras que usan la representación de signo-magnitud para los valores que se van a redondear, porque solo se debe considerar el primer dígito omitido para determinar si se redondea hacia arriba o hacia abajo. Este es un método que se usa para redondear a cifras significativas debido a su simplicidad.
Este método, también conocido como redondeo comercial , [ cita requerida ] trata los valores positivos y negativos de manera simétrica y, por lo tanto, está libre de sesgo positivo/negativo general si los números originales son positivos o negativos con la misma probabilidad. Sin embargo, aún tiene sesgo que se aleja del cero.
Se utiliza a menudo para conversiones de divisas y redondeos de precios (cuando el importe se convierte primero a la subdivisión significativa más pequeña de la moneda, como céntimos de euro), ya que es fácil de explicar considerando simplemente el primer dígito fraccionario, independientemente de los dígitos de precisión suplementarios o el signo del importe (para equivalencia estricta entre el pagador y el receptor del importe).
También se puede redondear la mitad a un entero par , una regla de desempate sin sesgo positivo/negativo y sin sesgo hacia/lejos de cero. Por esta convención, si la parte fraccionaria de x es 0,5, entonces y es el entero par más cercano a x . Así, por ejemplo, 23,5 se convierte en 24, al igual que 24,5; sin embargo, −23,5 se convierte en −24, al igual que −24,5. Esta función minimiza el error esperado al sumar cifras redondeadas, incluso cuando las entradas son mayoritariamente positivas o mayoritariamente negativas, siempre que no sean ni mayoritariamente pares ni mayoritariamente impares.
Esta variante del método de redondeo al más cercano también se denomina redondeo convergente , redondeo estadístico , redondeo holandés , redondeo gaussiano , redondeo par-impar , [6] o redondeo bancario . [7]
Este es el modo de redondeo predeterminado utilizado en las operaciones IEEE 754 para resultados en formatos de punto flotante binario.
Al eliminar el sesgo, la suma o resta repetida de números independientes, como en un recorrido aleatorio unidimensional , dará un resultado redondeado con un error que tiende a crecer en proporción a la raíz cuadrada del número de operaciones en lugar de hacerlo linealmente.
Sin embargo, esta regla distorsiona la distribución al aumentar la probabilidad de pares en relación con los impares. Por lo general, esto es menos importante [ cita requerida ] que los sesgos que se eliminan con este método.
También se puede redondear la mitad a impar , una regla de desempate similar a la de redondear la mitad a par. En este enfoque, si la parte fraccionaria de x es 0,5, entonces y es el entero impar más cercano a x . Así, por ejemplo, 23,5 se convierte en 23, al igual que 22,5; mientras que −23,5 se convierte en −23, al igual que −22,5.
Este método también está libre de sesgo positivo/negativo y de sesgo hacia/desde cero, siempre que los números que se van a redondear no sean ni mayoritariamente pares ni mayoritariamente impares. También comparte la propiedad de redondear a la mitad a pares de distorsionar la distribución original, ya que aumenta la probabilidad de impares en relación con pares. Fue el método utilizado para los saldos bancarios en el Reino Unido cuando decimalizó su moneda [8] [ aclaración necesaria ] .
Esta variante casi nunca se utiliza en los cálculos, excepto en situaciones en las que se desea evitar aumentar la escala de los números de punto flotante, que tienen un rango de exponentes limitado. Con round half to even , un número no infinito se redondearía a infinito, y un valor desnormal pequeño se redondearía a un valor normal distinto de cero. Efectivamente, este modo prefiere preservar la escala existente de números de empate, evitando resultados fuera de rango cuando sea posible para sistemas numéricos de base par (como binario y decimal). [ aclaración necesaria (ver discusión ) ] .
Este modo de redondeo se utiliza para evitar obtener un resultado potencialmente erróneo después de varios redondeos. Esto se puede lograr si todos los redondeos, excepto el final, se realizan utilizando el redondeo para preparar una precisión más corta ("RPSP") y solo el redondeo final utiliza el modo solicitado externamente.
En la aritmética decimal, se evitan los dígitos finales de 0 y 5; si hay una elección entre números con el dígito menos significativo 0 o 1, 4 o 5, 5 o 6, 9 o 0, entonces se seleccionará el dígito diferente de 0 o 5; de lo contrario, la elección es arbitraria. IBM define que, en el último caso, se seleccionará un dígito con la magnitud más pequeña. [9] RPSP se puede aplicar con el paso entre dos redondeos consecutivos tan pequeños como un solo dígito (por ejemplo, se puede aplicar un redondeo a 1/10 después de un redondeo a 1/100). Por ejemplo, al redondear a un entero,
En el ejemplo de la sección "Redondeo doble", redondear 9,46 a un decimal da 9,4, que redondeado a un número entero a su vez da 9.
En aritmética binaria, este redondeo también se denomina "redondeo a impar" (no debe confundirse con "redondeo a la mitad de impar"). Por ejemplo, al redondear a 1/4 (0,01 en binario),
Para obtener resultados correctos, cada paso de redondeo debe eliminar al menos 2 dígitos binarios; de lo contrario, pueden aparecer resultados erróneos. Por ejemplo,
Si se elimina el paso intermedio erróneo, el redondeo final a número entero redondea 3,25 al valor correcto de 3.
RPSP está implementado en hardware en IBM zSeries y pSeries .
Un método, más oscuro que la mayoría, es alternar la dirección al redondear un número con una parte fraccionaria de 0,5. Todos los demás se redondean al entero más cercano. Siempre que la parte fraccionaria sea 0,5, alterna el redondeo hacia arriba o hacia abajo: para la primera aparición de una parte fraccionaria de 0,5, redondea hacia arriba, para la segunda aparición, redondea hacia abajo, y así sucesivamente. Alternativamente, el primer redondeo de la parte fraccionaria de 0,5 se puede determinar mediante una semilla aleatoria . "Hacia arriba" y "hacia abajo" pueden ser dos métodos de redondeo opuestos entre sí: hacia y desde el infinito positivo o hacia y desde el cero.
Si las ocurrencias de 0,5 fracciones se dan con una frecuencia significativamente mayor que la de un reinicio del "conteo" de ocurrencias, entonces está efectivamente libre de sesgo. Con un sesgo cero garantizado, es útil si se deben sumar o promediar los números.
Si la parte fraccionaria de x es 0,5, se elige y al azar entre x + 0,5 y x − 0,5 , con la misma probabilidad. Todos los demás se redondean al número entero más cercano.
Al igual que la regla de redondeo a par y la de redondeo a impar, esta regla está esencialmente libre de sesgos generales, pero también es justa entre valores y pares e impares . Una ventaja sobre el desempate alternativo es que no es necesario "recordar" la última dirección de redondeo en la parte fraccionaria de 0,5.
El redondeo de la siguiente manera a uno de los números enteros más cercanos hacia el infinito negativo y el número entero más cercano hacia el infinito positivo, con una probabilidad que depende de la proximidad, se denomina redondeo estocástico y dará un resultado imparcial en promedio. [10]
Por ejemplo, 1,6 se redondearía a 1 con probabilidad 0,4 y a 2 con probabilidad 0,6.
El redondeo estocástico puede ser preciso de una manera que una función de redondeo nunca puede serlo. Por ejemplo, supongamos que uno comenzó con 0 y agregó 0,3 a eso cien veces mientras redondeaba el total acumulado entre cada adición. El resultado sería 0 con el redondeo regular, pero con el redondeo estocástico, el resultado esperado sería 30, que es el mismo valor obtenido sin redondeo. Esto puede ser útil en el aprendizaje automático donde el entrenamiento puede usar aritmética de baja precisión de forma iterativa. [10] El redondeo estocástico también es una forma de lograr tramado unidimensional .
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 enteras de segundo, centésimas de dólar, a múltiplos enteros de 1/2 o 1/8 de pulgada, a docenas o millares enteros, etc.
En general, redondear un número x a un múltiplo de un valor positivo especificado m implica los siguientes pasos:
Por ejemplo, redondear x = 2,1784 dólares a centavos enteros (es decir, a un múltiplo de 0,01) implica calcular 2,1784 / 0,01 = 217,84 , luego redondearlo a 218 y, finalmente, calcular 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 la visualización a los humanos, eso suele significar el sistema numérico decimal (es decir, m es un entero multiplicado por una potencia de 10, como 1/1000 o 25/100). Para los valores intermedios almacenados en computadoras digitales, a menudo significa el sistema numérico binario ( m es un entero multiplicado 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 presentadas en la sección de redondeo a entero. La función abstracta de dos argumentos "roundToMultiple()" se define formalmente aquí, pero en muchos casos se utiliza con el valor implícito m = 1 para el incremento y luego se reduce a la función abstracta equivalente de un solo argumento, con también la misma docena de definiciones concretas distintas.
Redondear a una potencia específica es muy diferente de redondear a un múltiplo específico ; por ejemplo, es común en informática tener que redondear un número a una potencia entera de 2. Los pasos, en general, para redondear un número positivo x a una potencia de algún número positivo b distinto de 1, son:
Muchas de las advertencias aplicables al redondeo a un múltiplo son aplicables al redondeo a una potencia.
Este tipo de redondeo, que también se denomina redondeo a escala logarítmica , es una variante del redondeo a una potencia específica. El redondeo a escala logarítmica se logra tomando el logaritmo de la cantidad y haciendo un redondeo normal al valor más cercano en la escala logarítmica.
Por ejemplo, las resistencias se suministran con números preferidos en una escala logarítmica. En particular, para resistencias con una precisión del 10%, se suministran con valores nominales 100, 120, 150, 180, 220, etc. redondeados a múltiplos de 10 ( serie E12 ). Si un cálculo indica que se requiere una resistencia de 165 ohmios, entonces log(150) = 2,176 , log(165) = 2,217 y log(180) = 2,255 . El logaritmo de 165 está más cerca del logaritmo de 180, por lo tanto, una resistencia de 180 ohmios sería la primera opción si no hay otras consideraciones.
El hecho de que un valor x ∈ ( a , b ) se redondee a a o b depende de si el valor al cuadrado x 2 es mayor o menor que el producto ab . El valor 165 se redondea a 180 en el ejemplo de las resistencias porque 165 2 = 27225 es mayor que 150 × 180 = 27000 .
En aritmética de punto flotante , el redondeo tiene como objetivo convertir un valor x dado en un valor y con una cantidad específica de dígitos significativos . En otras palabras, y debe ser un múltiplo de un número m que depende de la magnitud de x . El número m es una potencia de la base (generalmente 2 o 10) de la representación de punto flotante.
Aparte de este detalle, todas las variantes de redondeo analizadas anteriormente se aplican también al redondeo de números de punto flotante. El algoritmo para dicho redondeo se presenta en la sección Redondeo escalado anterior, pero con un factor de escala constante s = 1 y una base entera b > 1 .
Cuando el resultado redondeado se desborda, el resultado de un redondeo dirigido es el infinito con signo apropiado cuando se "redondea a partir de cero", o el número finito positivo representable más alto (o el número finito negativo representable más bajo si x es negativo), cuando se "redondea hacia cero". El resultado de un desbordamiento para el caso habitual de redondeo al más cercano es siempre el infinito apropiado.
En algunos contextos es deseable redondear un número dado x a una fracción "ordenada", es decir, la fracción más próxima y = m / n cuyo numerador m y denominador n no excedan un máximo dado. Este problema es bastante distinto del 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 sucesiones de Farey , el árbol de Stern-Brocot y las fracciones continuas .
La madera terminada , el papel para escribir, los condensadores y muchos otros productos generalmente se venden solo en unos pocos tamaños estándar.
Muchos procedimientos de diseño describen cómo calcular un valor aproximado y luego "redondearlo" a un 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". [11] [12]
Cuando un conjunto de valores preferidos está espaciado de forma uniforme en una escala logarítmica, la elección del valor preferido más cercano a cualquier valor dado puede considerarse como una forma de redondeo a escala. Dichos valores redondeados pueden calcularse directamente. [13]
Las reglas de redondeo más generales pueden separar valores en puntos de corte arbitrarios, que se utilizan, por ejemplo, en la clasificación de datos . Una herramienta matemáticamente formalizada relacionada son las secuencias de postes indicadores , que utilizan nociones de distancia distintas de la simple diferencia; por ejemplo, una secuencia puede redondearse al número entero con el menor error relativo (porcentaje).
Al digitalizar señales continuas , como las ondas sonoras, el efecto global de una serie de mediciones es más importante que la precisión de cada medición individual. En estas circunstancias, normalmente se utiliza el dithering y una técnica relacionada, la difusión de errores . Una técnica relacionada denominada modulación por ancho de pulso se utiliza para lograr una salida de tipo analógico a partir de un dispositivo inercial pulsando rápidamente la potencia con un ciclo de trabajo variable.
La difusión de errores intenta garantizar que el error, en promedio, se minimice. Cuando se trabaja con una pendiente suave de uno a cero, el resultado sería cero para los primeros términos hasta que la suma del error y el valor actual sea mayor que 0,5, en cuyo caso se obtiene un 1 y la diferencia se resta del error hasta el momento. El tramado de Floyd-Steinberg es un procedimiento de difusión de errores popular al digitalizar imágenes.
Como ejemplo unidimensional, supongamos que los números 0,9677 , 0,9204 , 0,7451 y 0,3091 aparecen en orden y que cada uno de ellos se debe redondear a un múltiplo de 0,01 . En este caso, las sumas acumuladas, 0,9677 , 1,8881 = 0,9677 + 0,9204 , 2,6332 = 0,9677 + 0,9204 + 0,7451 y 2,9423 = 0,9677 + 0,9204 + 0,7451 + 0,3091 , se redondean cada una a un múltiplo de 0,01 : 0,97 , 1,89 , 2,63 y 2,94 . El primero de estos y las diferencias de valores adyacentes dan los valores redondeados deseados: 0,97 , 0,92 = 1,89 − 0,97 , 0,74 = 2,63 − 1,89 y 0,31 = 2,94 − 2,63 .
La aritmética de Monte Carlo es una técnica de los métodos de Monte Carlo en la que el redondeo se realiza de forma aleatoria hacia arriba o hacia abajo. El redondeo estocástico se puede utilizar para la aritmética de Monte Carlo, pero en general, se utiliza con más frecuencia el redondeo hacia arriba o hacia abajo con la misma probabilidad. Las ejecuciones repetidas darán una distribución aleatoria de resultados que puede indicar la estabilidad del cálculo. [14]
Es posible utilizar la aritmética redondeada para evaluar el valor exacto de una función con dominio y rango enteros. Por ejemplo, si se sabe que un entero n es un cuadrado perfecto, su raíz cuadrada se puede calcular convirtiendo n en un valor de punto flotante z , calculando la raíz cuadrada aproximada x de z con punto flotante y luego redondeando x al entero más cercano y . Si n no es demasiado grande, el error de redondeo de punto flotante en x será menor que 0,5, por lo que el valor redondeado y será la raíz cuadrada exacta de n . Esta es esencialmente la razón por la que las reglas de cálculo podrían usarse para la aritmética exacta.
No se garantiza que redondear un número dos veces seguidas a diferentes niveles de precisión, siendo la última precisión más burda, dé el mismo resultado que redondearlo una vez a la precisión final, excepto en el caso del redondeo dirigido. [nb 2] Por ejemplo, redondear 9,46 a un decimal da 9,5, y luego 10 cuando se redondea a un entero utilizando el redondeo de la mitad a par, pero daría 9 cuando se redondea a un entero directamente. Borman y Chatfield [15] analizan las implicaciones del doble redondeo al comparar datos redondeados a un decimal con límites de especificación expresados utilizando números enteros.
En los casos Martinez v. Allstate y Sendejo v. Farmers , litigados entre 1995 y 1997, las compañías de seguros argumentaron que las primas redondeadas dobles eran permisibles y, de hecho, obligatorias. Los tribunales estadounidenses fallaron en contra de las compañías de seguros y les ordenaron adoptar normas para garantizar el redondeo simple. [16]
Algunos lenguajes de programación y el estándar IEEE 754-2008 dictan que en 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 manera idéntica en diferentes máquinas; se han tenido que usar trucos de programación especiales para lograr esto con el punto flotante x87 . [17] [18] El lenguaje Java se modificó para permitir diferentes resultados donde la diferencia no importa y requiere que se use un calificador strictfp cuando los resultados deben cumplir con precisión; el punto flotante estricto se ha restaurado en Java 17. [19]
En algunos algoritmos, un resultado intermedio se calcula con una precisión mayor y luego se debe redondear a la precisión final. El doble redondeo se puede evitar eligiendo un redondeo adecuado para el cálculo intermedio. Esto consiste en evitar redondear a puntos medios para el redondeo final (excepto cuando el punto medio es exacto). En aritmética binaria, la idea es redondear el resultado hacia cero y establecer el bit menos significativo en 1 si el resultado redondeado es inexacto; este redondeo se llama redondeo pegajoso . [20] De manera equivalente, consiste en devolver el resultado intermedio cuando es exactamente representable y el número de punto flotante más cercano con un significando impar en caso contrario; por eso también se lo conoce como redondeo a impar . [21] [22] Una implementación concreta de este enfoque, para aritmética binaria y decimal, se implementa como Redondeo para prepararse para una precisión más corta.
William M. Kahan acuñó el término "El dilema del fabricante de tablas" para el costo desconocido de redondear funciones trascendentales :
Nadie sabe cuánto costaría calcular y w correctamente redondeado para cada dos argumentos de punto flotante en los que no se produzca un desbordamiento o desbordamiento. En cambio, las bibliotecas matemáticas de confianza calculan funciones trascendentales elementales en su mayoría dentro de un poco más de la mitad de un ulp y casi siempre dentro de un ulp. ¿Por qué no se puede redondear y w dentro de la mitad de un ulp como SQRT? Porque nadie sabe cuánto costaría el cálculo... No existe una forma general de predecir cuántos dígitos adicionales se tendrán que llevar para calcular una expresión trascendental y redondearla correctamente a un número preasignado de dígitos. Incluso el hecho (si es cierto) de que un número finito de dígitos adicionales será finalmente suficiente puede ser un teorema profundo. [23]
El estándar de punto flotante IEEE 754 garantiza que la suma, resta, multiplicación, división, multiplicación-suma fusionada , raíz cuadrada y resto de punto flotante darán el resultado correctamente redondeado de la operación de precisión infinita. No se dio tal garantía en el estándar de 1985 para funciones más complejas y, en el mejor de los casos, estas funciones solo son precisas hasta el último bit. Sin embargo, el estándar de 2008 garantiza que las implementaciones conformes darán resultados correctamente redondeados que respeten el modo de redondeo activo; sin embargo, la implementación de las funciones es opcional.
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 , excepto en algunos argumentos bien conocidos; por lo tanto, desde un punto de vista teórico, siempre es posible redondear correctamente tales funciones. Sin embargo, para una implementación de dicha función, determinar un límite para una precisión dada sobre cómo se deben calcular los resultados exactos, antes de que se pueda garantizar un resultado correctamente redondeado, puede demandar mucho tiempo de cálculo o puede estar fuera de alcance. [24] En la práctica, cuando este límite no se conoce (o solo se conoce un límite muy grande), se debe tomar alguna decisión en la implementación (ver más abajo); pero de acuerdo con un modelo probabilístico, el redondeo correcto se puede satisfacer con una probabilidad muy alta cuando se usa una precisión intermedia de hasta el doble del número de dígitos del formato de destino más alguna pequeña constante (después de tomar en cuenta casos especiales).
Algunos paquetes de programación ofrecen un redondeo correcto. El paquete GNU MPFR ofrece resultados de precisión arbitraria correctamente redondeados. Otras bibliotecas implementan funciones elementales con redondeo correcto en precisión doble IEEE 754 (binary64):
Existen números computables para los cuales nunca se puede determinar un valor redondeado, sin importar cuántos dígitos se calculen. No se pueden dar casos específicos, pero esto se deduce de la indecidibilidad del problema de detención . Por ejemplo, si la conjetura de Goldbach es verdadera pero no demostrable , entonces no se puede determinar el resultado de redondear el siguiente valor, n , hasta el siguiente entero: o n = 1 + 10 − k donde k es el primer número par mayor que 4 que no es la suma de dos primos, o n = 1 si no existe tal número. El resultado redondeado es 2 si existe tal número k y 1 en caso contrario. Sin embargo, el valor antes del redondeo se puede aproximar a cualquier precisión dada incluso si la conjetura es indemostrable.
El redondeo puede afectar negativamente a la búsqueda de una cadena de caracteres para un número. Por ejemplo, π redondeado a cuatro dígitos es "3,1416", pero una búsqueda simple de esta cadena no descubrirá "3,14159" ni ningún otro valor de π redondeado a más de cuatro dígitos. Por el contrario, el truncamiento no sufre este problema; por ejemplo, una búsqueda simple de la cadena "3,1415", que es π truncado a cuatro dígitos, descubrirá valores de π truncados a más de cuatro dígitos.
El concepto de redondeo es muy antiguo, tal vez más antiguo que el concepto de división en sí. Algunas tablillas de arcilla antiguas encontradas en Mesopotamia contienen tablas con valores redondeados de recíprocos y raíces cuadradas en base 60. [40] Las aproximaciones redondeadas a π , la duración del año y la duración del mes también son antiguas; véanse los ejemplos de base 60 .
El método de redondeo a la mitad hasta el par ha servido como estándar estadounidense Z25.1 y estándar ASTM E-29 desde 1940. [41] El origen de los términos redondeo imparcial y redondeo estadístico se explica por sí solo. En la cuarta edición de 1906 de Probability and Theory of Errors, Robert Simpson Woodward lo llamó "la regla de la computadora", [42] indicando que entonces era de uso común por parte de las computadoras humanas que calculaban tablas matemáticas. Por ejemplo, fue recomendado en el libro de Simon Newcomb de alrededor de 1882 Logarithmic and Other Mathematical Tables . [43] La Teoría de las mediciones de Lucius Tuttle de 1916 lo llamó una "regla universalmente adoptada" para registrar mediciones físicas. [44] Churchill Eisenhart indicó que la práctica ya estaba "bien establecida" en el análisis de datos en la década de 1940. [45]
El origen del término "redondeo bancario" sigue siendo más oscuro. Si este método de redondeo fue alguna vez una norma en banca, la evidencia ha resultado extremadamente difícil 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 importes monetarios [46] sugiere que anteriormente no había habido un enfoque estándar para el redondeo en banca y especifica que los importes "a mitad de camino" deben redondearse hacia arriba.
Hasta la década de 1980, el método de redondeo utilizado en la aritmética informática de punto flotante solía estar fijado por el hardware, mal documentado, inconsistente y diferente para cada marca y modelo de computadora. Esta situación cambió después de que la mayoría de los fabricantes de computadoras adoptaran el estándar de punto flotante IEEE 754. 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, y posibilitaron la implementación eficiente y consistente de la aritmética de intervalos .
Actualmente, muchas investigaciones tienden a redondear a múltiplos de 5 o 2. Por ejemplo, Jörg Baten utilizó el método de agrupamiento por edad en muchos estudios para evaluar el nivel de alfabetización de las poblaciones antiguas. Él ideó el índice ABCC , que permite la comparación de la alfabetización entre regiones sin necesidad de fuentes históricas donde se haya medido la alfabetización de la población . [47]
La mayoría de los lenguajes de programación proporcionan funciones o sintaxis especial para redondear números fraccionarios de diversas maneras. Los primeros lenguajes numéricos, como FORTRAN y C , proporcionaban solo un método, generalmente el truncamiento (hacia cero). Este método predeterminado podía estar implícito en ciertos contextos, como al asignar un número fraccionario a una variable entera o al usar 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 sumando 0,5 y truncando.
En las últimas décadas, sin embargo, la sintaxis y 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, abajo, al más cercano y hacia cero). El método de desempate puede variar según el lenguaje y la versión o puede ser seleccionable por el programador. Varios lenguajes siguen el ejemplo del estándar de punto flotante IEEE 754 y definen estas funciones como tomar un argumento flotante de doble precisión y devolver el resultado del mismo tipo, que luego puede convertirse en un entero si es necesario. Este enfoque puede evitar desbordamientos espurios porque los tipos de punto flotante tienen un rango más grande que los tipos enteros. Algunos lenguajes, como PHP , proporcionan funciones que redondean un valor a un número especificado 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 especificado por el usuario de lugares decimales (la precisión ). Por otro lado, el truncamiento (redondeo a cero) sigue siendo el método de redondeo predeterminado utilizado por muchos idiomas, 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 números y medidas, que tratan y exponen en su DOM y en su interfaz IDL como cadenas como si tuvieran precisión infinita , y no discriminan entre números enteros y valores de punto flotante; sin embargo, las implementaciones de estos lenguajes normalmente convertirán estos números en valores de punto flotante de doble precisión IEEE 754 antes de exponer los dígitos calculados con una precisión limitada (notablemente dentro de los enlaces de interfaz estándar de JavaScript o ECMAScript [48] ).
Algunas disciplinas o instituciones han emitido normas o directivas para el redondeo.
En una directriz emitida a mediados de 1966, [49] la Oficina del Coordinador Federal de Meteorología de los Estados Unidos determinó que los datos meteorológicos debían redondearse al número redondo más cercano, con la regla de desempate de "redondear a la mitad hacia arriba". Por ejemplo, 1,5 redondeado a un número entero debería convertirse en 2, y −1,5 debería convertirse en −1. Antes de esa fecha, la regla de desempate era "redondear a la mitad desde cero".
Algunos meteorólogos pueden escribir "−0" para indicar una temperatura entre 0,0 y −0,5 grados (exclusivamente) que se redondeó a un número entero. Esta notación se utiliza cuando el signo negativo se considera importante, sin importar cuán pequeña sea la magnitud; por ejemplo, al redondear temperaturas en la escala Celsius , donde por debajo de cero indica congelamiento. [ cita requerida ]
redondeo al número par más cercano también se denomina "redondeo bancario" porque los bancos también utilizan esta técnica.Guía del usuario del compilador Microsoft Pascal para el sistema operativo MS-DOS . Microsoft Corporation. 1985. pág. 165.
El redondeo bancario se utiliza para truncar números reales que terminan en 0,5; es decir, los números impares se redondean hacia arriba a un entero par, los números pares se redondean hacia abajo a un entero par.
Un hecho importante con respecto al error 1/2 para
n
par es que su signo es arbitrario, o no está fijado por el cálculo como es el caso con todos los demás errores. Sin embargo, la regla de la computadora, que hace que la última cifra redondeada de un valor interpolado sea par cuando se debe desechar la mitad de una unidad, a largo plazo hará que este error sea tan a menudo positivo como negativo.
Aquí tenemos un caso en el que se requiere la mitad de un número impar. [...] Una buena regla para adoptar en tal caso es
escribir el
número
par
más cercano .
Una fracción perceptiblemente menor que la mitad debe descartarse y más de la mitad siempre debe considerarse como una unidad más, pero cuando no se sabe qué cifra es la más cercana, la regla universalmente adoptada es registrar
el número par más cercano
en lugar del número impar que esté igualmente cerca. La razón de este procedimiento es que en una serie de varias mediciones de la misma cantidad será tan probable que se registre un valor demasiado grande como uno demasiado pequeño, y así, en el promedio de varios de esos valores, sólo se producirá un pequeño error, si es que hay alguno.