Redondear o redondear significa reemplazar un número con un valor aproximado que tenga una representación más corta, más simple o más explícita. Por ejemplo, reemplazando $ 23,4476 por $ 23,45 , la fracción 312/937 por 1/3, o la expresión √2 por 1,414 .
A menudo se realiza el redondeo 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 informes engañosamente precisos de un número, medida o estimación calculados; por ejemplo, una cantidad que se calculó como 123456 pero que se sabe que tiene una precisión de sólo unos pocos cientos de unidades suele expresarse mejor como "aproximadamente 123500 ".
Por otro lado, el redondeo de números exactos introducirá algún error de redondeo en el resultado informado. El redondeo es casi inevitable cuando se realizan muchos cálculos, especialmente cuando se dividen dos números en aritmética de números enteros o de coma fija ; al calcular 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 significado.
El redondeo preciso de funciones matemáticas trascendentales es difícil porque no se puede saber de antemano el número de dígitos adicionales que deben calcularse para resolver si se debe redondear hacia arriba o hacia abajo. Este problema se conoce como "el dilema del fabricante de mesas".
El redondeo tiene muchas similitudes con la cuantificación que se produce 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, por ejemplo, 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:
Debido a que generalmente no es posible que un método satisfaga todas las características ideales, existen muchos métodos de redondeo diferentes.
Por regla general, el redondeo es idempotente ; [2] es decir, una vez que se ha redondeado un número, redondearlo nuevamente con la misma precisión no cambiará su valor. Las funciones de redondeo también son monótonas ; es decir, redondear dos números con 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 típicos de redondeo incluyen:
La forma más básica de redondeo es sustituir un número arbitrario por un número entero. Todos los siguientes modos de redondeo son implementaciones concretas de un procedimiento abstracto de un solo argumento "round()". Estas son funciones verdaderas (con excepción de aquellas que usan aleatoriedad).
Estos cuatro métodos se denominan redondeo dirigido a un número entero , ya que los desplazamientos desde el número original x al valor redondeado y están todos dirigidos hacia o lejos del mismo valor límite (0, +∞ o −∞). El redondeo dirigido se utiliza en aritmética de intervalos y suele ser necesario en 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 desde cero. Si x es negativo, redondear hacia abajo es lo mismo que redondear 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 1.000.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 forma que se acumulaban los errores de redondeo. Al volver a calcular el índice para el mismo período utilizando el redondeo a la milésima más cercana en lugar de truncarlo, 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 la palabra , o redondear hacia el infinito negativo ): y es el número 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 número 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 de modo 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 ) de modo 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 número entero más cercano . Redondear un número x al entero más cercano requiere alguna regla de desempate para aquellos casos en los que x está exactamente a mitad de camino entre dos números 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 en la misma cantidad.
Al redondear un conjunto grande de números de coma fija con partes fraccionarias distribuidas uniformemente , los errores de redondeo por todos los valores, con la omisión de aquellos que tienen 0,5 partes fraccionarias, 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 parte fraccionaria 0,5.
En la práctica, se suelen utilizar números de punto flotante , que tienen aún más matices computacionales porque no están igualmente espaciados.
Se puede redondear la mitad hacia arriba (o redondear la mitad hacia el infinito positivo ), una regla de desempate que se utiliza ampliamente en muchas disciplinas. [ cita necesaria ] 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 desde 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 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, que es más común . 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) usan "mitad 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 desde el infinito ) en lugar de la mitad convencional redondeada desde cero . 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 forma simétrica y, por lo tanto, está libre de sesgo general positivo/negativo si los números originales son positivos o negativos con la misma probabilidad. Sin embargo, todavía tiene un sesgo hacia cero.
También se puede redondear la mitad desde cero (o redondear la mitad hacia el infinito ), una regla de desempate que se enseña y utiliza comúnmente, a saber: si la parte fraccionaria de x es exactamente 0,5, entonces y = x + 0,5 si x es positiva , y 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 representación de signo-magnitud para los valores a redondear, porque solo es necesario considerar el primer dígito omitido para determinar si se redondea hacia arriba o hacia abajo. Este es un método utilizado al redondear a cifras significativas debido a su simplicidad.
Este método, también conocido como redondeo comercial , [ cita necesaria ] trata los valores positivos y negativos de forma simétrica y, por lo tanto, está libre de sesgo general positivo/negativo si los números originales son positivos o negativos con la misma probabilidad. Sin embargo, todavía tiene un sesgo alejado de cero.
A menudo se utiliza para conversiones de moneda y redondeos de precios (cuando el importe se convierte por primera vez a la subdivisión significativa más pequeña de la moneda, como céntimos de euro), ya que es fácil de explicar simplemente considerando el primer dígito fraccionario, independientemente de los suplementos. dígitos de precisión o signo del importe (para estricta equivalencia entre el pagador y el destinatario del importe).
También se puede redondear la mitad a par , una regla de desempate sin sesgo positivo/negativo y sin sesgo hacia/alejándose de cero. Según esta convención, si la parte fraccionaria de x es 0,5, entonces y es el número 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 en su mayoría positivas o en su mayoría negativas, siempre que no sean en su mayoría pares ni en su mayoría 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 operaciones IEEE 754 para resultados en formatos binarios de punto flotante.
Al eliminar el sesgo, la suma o resta repetida de números independientes, como en un paseo 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 linealmente.
Sin embargo, esta regla distorsiona la distribución al aumentar la probabilidad de pares en relación con las probabilidades. Normalmente, esto es menos importante [ cita necesaria ] 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 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 sesgos positivos/negativos y de sesgos hacia/alejándose de cero, siempre que los números a redondear no sean en su mayoría pares ni en su mayoría impares. También comparte la propiedad de mitad redonda a par de distorsionar la distribución original, ya que aumenta la probabilidad de probabilidades en relación con pares. Fue el método utilizado para los saldos bancarios en el Reino Unido cuando decimalizó su moneda [8] [ se necesita aclaración ] .
Esta variante casi nunca se utiliza en cálculos, excepto en situaciones en las que se quiere evitar aumentar la escala de los números de punto flotante, que tienen un rango de exponente limitado. Con redondear la mitad a par , un número no infinito se redondearía al infinito y un pequeño valor anormal se redondearía a un valor normal distinto de cero. Efectivamente, este modo prefiere preservar la escala existente de números vinculados, evitando resultados fuera de rango cuando sea posible para sistemas numéricos de base par (como el binario y el decimal). [ se necesita aclaración (ver charla ) ] .
Este modo de redondeo se utiliza para evitar obtener un resultado potencialmente incorrecto después de varios redondeos. Esto se puede lograr si todos los redondeos excepto el final se realizan usando RPSP, y solo el redondeo final usa el modo solicitado externamente.
Con la aritmética decimal, se evitan los dígitos finales de 0 y 5; si se puede elegir entre números cuyo dígito menos significativo sea 0 o 1, 4 o 5, 5 o 6, 9 o 0, se seleccionará el dígito distinto de 0 o 5; de lo contrario, la elección es arbitraria. IBM define que, en este último caso, se seleccionará un dígito de menor magnitud. [9] RPSP se puede aplicar con un paso entre dos redondeos consecutivos tan pequeño como un solo dígito (por ejemplo, se puede aplicar el redondeo a 1/10 después de redondear a 1/100). Por ejemplo, al redondear a un número entero,
En el ejemplo de la sección "Doble redondeo", redondear 9,46 a un decimal da 9,4, que a su vez redondea a un número entero da 9.
En la aritmética binaria, este redondeo también se denomina "redondear a impar" (no debe confundirse con "redondear la mitad a 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 incorrectos. Por ejemplo,
Si se elimina el paso intermedio erróneo, el redondeo final a números enteros redondea 3,25 al valor correcto de 3.
RPSP se implementa 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 0,5 partes fraccionarias. Todos los demás se redondean al número entero más cercano. Siempre que la parte fraccionaria sea 0,5, redondee alternativamente hacia arriba o 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, y así sucesivamente. Alternativamente, el primer redondeo de 0,5 partes fraccionarias se puede determinar mediante una semilla aleatoria . "Arriba" y "abajo" pueden ser dos métodos de redondeo que se oponen entre sí: hacia y desde el infinito positivo o hacia y desde cero.
Si las apariciones de 0,5 partes fraccionarias ocurren significativamente más que un reinicio del "conteo" de ocurrencias, entonces efectivamente está libre de sesgos. Con un sesgo cero garantizado, es útil si los números se van a sumar o promediar.
Si la parte fraccionaria de x es 0,5, elige y aleatoriamente entre x + 0,5 y x − 0,5 , con igual probabilidad. Todos los demás se redondean al número entero más cercano.
Al igual que redondear la mitad a par y redondear la mitad a impar, esta regla está esencialmente libre de sesgo general, pero también es justa entre valores de 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.
Redondear de la siguiente manera a uno de los enteros más cercanos hacia el infinito negativo y al 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 insesgado en promedio. [10]
Por ejemplo, 1,6 se redondearía a 1 con probabilidad de 0,4 y a 2 con probabilidad de 0,6.
El redondeo estocástico puede ser preciso de una manera que una función de redondeo nunca podrá serlo. Por ejemplo, supongamos que uno comienza con 0 y le suma 0,3 cien veces mientras redondea el total acumulado entre cada suma. El resultado sería 0 con redondeo regular, pero con redondeo estocástico el resultado esperado sería 30, que es el mismo valor obtenido sin redondeo. Esto puede resultar útil en el aprendizaje automático , donde la formación puede utilizar aritmética de baja precisión de forma iterativa. [10] El redondeo estocástico también es una forma de lograr un 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 de segundo enteras, centésimas de dólar, múltiplos enteros de 1/2 o 1/8 de pulgada, decenas enteras o miles, etc.
En general, redondear un número x a un múltiplo de algún valor positivo m especificado 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 mostrarlo a los humanos, eso generalmente significa el sistema numérico decimal (es decir, m es un número entero multiplicado por una potencia de 10, como 1/1000 o 25/100). Para valores intermedios almacenados en computadoras digitales, a menudo significa el sistema de numeración binario ( m es un número entero multiplicado por una potencia de 2).
La función abstracta de argumento único "round()" que devuelve un número 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 números enteros. La función abstracta de dos argumentos "roundToMultiple()" se define formalmente aquí, pero en muchos casos se usa 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 definiciones concretas distintas.
Redondear a una potencia específica es muy diferente a redondear a un múltiplo específico ; por ejemplo, en informática es común necesitar 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 múltiplo también se aplican al redondeo a una potencia.
Este tipo de redondeo, que también recibe el nombre de redondeo a escala logarítmica , es una variante del redondeo a una potencia determinada. El redondeo en una escala logarítmica se logra tomando el logaritmo de la cantidad y redondeando normalmente al valor más cercano en la escala logarítmica.
Por ejemplo, las resistencias se suministran con números preferidos en escala logarítmica. En particular, las 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.
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 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 un número específico de dígitos significativos . En otras palabras, y debe ser múltiplo de un número m que depende de la magnitud de x . El número m es una potencia de la base (normalmente 2 o 10) de la representación de punto flotante.
Aparte de este detalle, todas las variantes de redondeo comentadas anteriormente también se aplican al redondeo de números de coma 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 desbordaría el resultado de un redondeo dirigido es el infinito con signo apropiado al "redondear desde 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), al "redondear" hacia cero". El resultado de un desbordamiento para el caso habitual de redondear al más cercano es siempre el infinito apropiado.
En algunos contextos es deseable redondear un número dado x a una fracción "limpia", es decir, la fracción más cercana y = m / n cuyo numerador m y denominador n no exceden 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 determinada m . Este problema está relacionado con las secuencias 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 en sólo 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 usando 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á igualmente espaciado en una escala logarítmica, elegir el valor preferido más cercano a cualquier valor dado puede verse como una forma de redondeo escalado. Estos valores redondeados se pueden calcular directamente. [13]
Las reglas de redondeo más generales pueden separar valores en puntos de interrupción arbitrarios, como se utiliza, por ejemplo, en la agrupación de datos . Una herramienta matemáticamente formalizada relacionada son las secuencias de señales , que utilizan nociones de distancia distintas a la simple diferencia; por ejemplo, una secuencia puede redondearse al número entero con el error relativo (porcentaje) más pequeño.
Al digitalizar señales continuas , como las ondas sonoras, el efecto general 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 tramado y una técnica relacionada, la difusión de errores . Se utiliza una técnica relacionada llamada modulación de ancho de pulso para lograr una salida de tipo analógico desde 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 trata de una pendiente suave de uno a cero, la salida 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 genera un 1 y la diferencia se resta del error. hasta ahora. El tramado de Floyd-Steinberg es un procedimiento popular de difusión de errores 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 cada uno debe redondearse 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. a un múltiplo de 0,01 : 0,97 , 1,89 , 2,63 y 2,94 . El primero de ellos y las diferencias de los 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 aleatoriamente 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 mayor frecuencia simplemente redondear hacia arriba o hacia abajo con la misma probabilidad. Las ejecuciones repetidas darán una distribución aleatoria de los resultados que puede indicar la estabilidad del cálculo. [14]
Es posible utilizar aritmética redondeada para evaluar el valor exacto de una función con dominio y rango de enteros. Por ejemplo, si se sabe que un número entero n es un cuadrado perfecto, su raíz cuadrada se puede calcular convirtiendo n a un valor de coma flotante z , calculando la raíz cuadrada aproximada x de z con coma flotante y luego redondeando x a la 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 . Básicamente, esta es 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 esta última precisión más aproximada, dé el mismo resultado que redondear 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 número entero utilizando el redondeo a la mitad a un decimal, pero daría 9 cuando se redondea a un número 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 mediante números enteros.
En Martínez contra Allstate y Sendejo contra Farmers , litigados entre 1995 y 1997, las compañías de seguros argumentaron que las primas de doble redondeo estaban permitidas y, de hecho, exigidas. Los tribunales estadounidenses fallaron en contra de las compañías de seguros y les ordenaron adoptar normas para garantizar el redondeo único. [16]
Algunos lenguajes informáticos y el estándar IEEE 754-2008 dictan que en cálculos sencillos el resultado no debe redondearse dos veces. Este ha sido un problema particular con Java, ya que está diseñado para ejecutarse de manera idéntica en diferentes máquinas; se tuvieron que usar trucos de programación especiales para lograr esto con punto flotante x87 . [17] [18] El lenguaje Java se cambió para permitir diferentes resultados donde la diferencia no importa y requiere el uso de un calificador estrictofp cuando los resultados deben ajustarse 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. Se puede evitar el doble redondeo eligiendo un redondeo adecuado para el cálculo intermedio. Consiste en evitar redondear a puntos medios para el redondeo final (excepto cuando el punto medio sea 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 adhesivo . [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 significado impar en caso contrario; por eso también se le 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 mesas" para referirse al costo desconocido de redondear funciones trascendentales :
Nadie sabe cuánto costaría calcular y w correctamente redondeado por cada dos argumentos de punto flotante en los que no se desborde ni se desborde. En cambio, las bibliotecas matemáticas de buena reputación calculan funciones trascendentales elementales en su mayoría dentro de 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 medio 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 habrá que llevar para calcular una expresión trascendental y redondearla correctamente a un número de dígitos preasignado. 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. En el estándar de 1985 no se ofrecía tal garantía para funciones más complejas y, en el mejor de los casos, normalmente sólo tienen una precisión del último bit. Sin embargo, el estándar de 2008 garantiza que las implementaciones conformes darán resultados redondeados correctamente 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 arrojan resultados trascendentales , excepto en algunos argumentos bien conocidos; por lo tanto, desde un punto de vista teórico, siempre es posible redondear correctamente dichas 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 poder garantizar un resultado redondeado correctamente, puede requerir mucho tiempo de cálculo o puede estar fuera de alcance. [24] En la práctica, cuando no se conoce este límite (o sólo se conoce un límite muy grande), se debe tomar alguna decisión en la implementación (ver más abajo); pero según un modelo probabilístico, el redondeo correcto puede lograrse con una probabilidad muy alta cuando se utiliza una precisión intermedia de hasta el doble del número de dígitos del formato objetivo más alguna pequeña constante (después de tener en cuenta casos especiales).
Algunos paquetes de programación ofrecen un redondeo correcto. El paquete GNU MPFR proporciona resultados de precisión arbitraria correctamente redondeados. Algunas otras bibliotecas implementan funciones elementales con redondeo correcto en doble precisión 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 ejemplos específicos, pero esto se deriva de la indecidibilidad del problema de la detención . Por ejemplo, si la conjetura de Goldbach es cierta pero no demostrable , entonces no se puede determinar el resultado de redondear el siguiente valor, n , hasta el siguiente número entero: o n =1+10 − k donde k es el primer número par mayor que 4 que no es la suma de dos números primos, o n =1 si no existe tal número. El resultado redondeado es 2 si existe dicho número k y 1 en caso contrario. Sin embargo, el valor antes del redondeo puede aproximarse a cualquier precisión dada, incluso si la conjetura no es demostrable.
El redondeo puede afectar negativamente a la búsqueda de un número en una cadena. Por ejemplo, π redondeado a cuatro dígitos es "3,1416", pero una simple búsqueda 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 de cadena simple de "3.1415", que tiene π truncado a cuatro dígitos, descubrirá valores de π truncado a más de cuatro dígitos.
El concepto de redondeo es muy antiguo, quizás más antiguo que el concepto mismo 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. [40] Las aproximaciones redondeadas a π , la duración del año y la duración del mes también son antiguas; consulte ejemplos de base 60 .
El método de redondeo de mitad a par ha servido como norma estadounidense Z25.1 y norma ASTM E-29 desde 1940. [41] El origen de los términos redondeo imparcial y redondeo estadístico se explica por sí mismo. En la cuarta edición de 1906 de Probabilidad y teoría de los errores, Robert Simpson Woodward llamó a esto "la regla de la computadora", [42] indicando que entonces era de uso común por las computadoras humanas que calculaban tablas matemáticas. Por ejemplo, se recomendó en c . Libro de 1882 Tablas logarítmicas y otras tablas matemáticas . [43] La Teoría de las Medidas de Lucius Tuttle de 1916 la llamó una "regla universalmente adoptada" para registrar medidas 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 alguna vez fue un estándar en la 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 existía un enfoque estándar para el redondeo en la banca; y especifica que los importes "a mitad de camino" deben redondearse al alza.
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 adoptaron 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 se deben redondear 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 .
Actualmente, muchas investigaciones tienden a redondear a múltiplos de 5 o 2. Por ejemplo, Jörg Baten utilizó la acumulación de edad en muchos estudios para evaluar el nivel de aritmética de las poblaciones antiguas. Se le ocurrió el índice ABCC , que permite comparar la capacidad de aritmética entre regiones posibles sin fuentes históricas donde se midió la alfabetización de la población. [47]
La mayoría de los lenguajes de programación proporcionan funciones o sintaxis especiales para redondear números fraccionarios de diversas formas. Los primeros lenguajes numéricos, como FORTRAN y C , proporcionaban sólo un método, normalmente el truncamiento (hacia cero). Este método predeterminado podría estar implícito en ciertos contextos, como cuando se asigna un número fraccionario a una variable entera o se usa un número fraccionario como índice de una matriz . Otros tipos de redondeo tuvieron que programarse explícitamente; por ejemplo, se podría redondear un número positivo al entero más cercano sumando 0,5 y truncando.
Sin embargo, en las últimas décadas, la sintaxis y las bibliotecas estándar de la mayoría de los lenguajes comúnmente han proporcionado al menos las cuatro funciones básicas de redondeo (hacia arriba, hacia abajo, al más cercano y hacia cero). El método de desempate puede variar según el idioma y la versión o puede ser seleccionado por el programador. Varios lenguajes siguen el ejemplo del estándar de punto flotante IEEE 754 y definen estas funciones tomando un argumento flotante de doble precisión y devolviendo el resultado del mismo tipo, que luego puede convertirse a un número entero si es necesario. Este enfoque puede evitar desbordamientos espurios porque los tipos de punto flotante tienen un rango mayor que los tipos de números enteros. 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 (redondeo a cero) sigue siendo el método de redondeo predeterminado utilizado por 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 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 de punto flotante. valores; 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 (especialmente dentro de enlaces de interfaz estándar JavaScript o ECMAScript [48] ).
Algunas disciplinas o instituciones han emitido normas o directivas para el redondeo.
En una directriz publicada a mediados de 1966, [49] la Oficina del Coordinador Federal de Meteorología de 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 la mitad del cero".
Algunos meteorólogos pueden escribir "-0" para indicar una temperatura entre 0,0 y -0,5 grados (exclusiva) que se redondeó a un número entero. Esta notación se utiliza cuando se considera importante el signo negativo, por pequeña que sea la magnitud; por ejemplo, al redondear las temperaturas en la escala Celsius , donde debajo de cero indica congelación. [ cita necesaria ]
El 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 . Corporación Microsoft. 1985. pág. 165.
El redondeo bancario se utiliza al truncar números reales que terminan en 0,5; es decir, los números impares se redondean a un número entero par y los números pares se redondean a un número 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 ocurre con todos los demás errores. Sin embargo, la regla de la computadora, que redondea la última cifra de un valor interpolado incluso cuando se va a desechar media unidad, a la larga hará que este error sea tan frecuente como positivo o negativo.
Aquí tenemos un caso en el que se requiere la mitad de un número impar. [...] Una buena regla a adoptar en tal caso es
escribir el
número
par
más cercano .
Una fracción sensiblemente 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 cuál es la cifra más cercana, la regla universalmente adoptada es registrar
el número par más cercano
en lugar de el 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 hacer un registro demasiado grande como uno demasiado pequeño, y así en el promedio de varios valores de este tipo no se producirá más que una ligero error, si lo hubiera.