stringtranslate.com

redondeo

Gráficas del resultado, y , de redondear x usando diferentes métodos. Para mayor claridad, los gráficos se muestran desplazados de los valores enteros y . En el archivo SVG, coloque el cursor sobre un método para resaltarlo y, en los navegadores compatibles con SMIL , haga clic para seleccionarlo o anular su selección.

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 123.456 pero que se sabe que tiene una precisión de sólo unos pocos cientos de unidades suele expresarse mejor como "alrededor de 123.500".

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 punto fijo ; 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:

  1. El redondeo debe realizarse mediante una función . De esta manera, cuando la misma entrada se redondea en diferentes instancias, la salida no cambia.
  2. Los cálculos realizados con redondeo deben ser similares a los realizados sin redondeo.
    • Como resultado de (1) y (2), la salida del redondeo debe estar cerca de su entrada, a menudo lo más cerca posible por alguna métrica .
  3. Para que se considere redondeo, el rango será un subconjunto del dominio , en general discreto . Un rango clásico son los números enteros , Z.
  4. El redondeo debe preservar las simetrías que ya existen entre el dominio y el rango. Con precisión finita (o un dominio discreto), esto se traduce en eliminar el sesgo .
  5. Un método de redondeo debería tener utilidad en informática o aritmética humana donde se utiliza precisión finita y la velocidad es una consideración.

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 no cambiará su valor. Las funciones de redondeo también son monótonas ; es decir, redondear un número mayor da un resultado mayor o igual que redondear un número menor [ se necesita aclaración ] . En el caso general de un rango discreto, son funciones constantes por partes .

Tipos de redondeo

Los problemas típicos de redondeo incluyen:

Redondeo a entero

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).

Redondeo dirigido a un número entero

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, mientras que los precios de las acciones habían aumentado en general durante el período. . El problema se debía a que el índice se recalculaba miles de veces al día y siempre se redondeaba hacia abajo a 3 decimales, de tal forma que los errores de redondeo se acumulaban. El nuevo cálculo con un mejor redondeo arrojó un valor del índice de 1.098,892 al final del mismo período. [3]

Para los ejemplos siguientes, sgn( x ) se refiere a la función de signo aplicada al número original, x .

Redondeando hacia abajo

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.

Redondeando

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.

Redondeando hacia cero

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.

Redondeo desde cero

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.

Redondear al número entero más cercano

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 coma flotante , que tienen aún más matices computacionales porque no están igualmente espaciados.

Redondeando la mitad hacia arriba

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.

Por ejemplo, 23,5 se redondea a 24 y −23,5 se redondea a −23.

Sin embargo, algunos lenguajes de programación (como Java, Python) definen aquí su mitad arriba como la mitad redondeada desde cero . [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.

Redondeando la mitad hacia abajo

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 .

Por ejemplo, 23,5 se redondea a 23 y −23,5 se redondea a −24.

Sin embargo, algunos lenguajes de programación (como Java, Python) definen aquí su mitad hacia abajo como una mitad redonda hacia cero . [4] [5]

Redondear la mitad hacia cero

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 .

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.

Redondear a la mitad desde 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:

Por ejemplo, 23,5 se redondea a 24 y −23,5 se redondea a −24.

Esto puede ser más eficiente en computadoras binarias porque solo es necesario considerar el primer bit omitido para determinar si se redondea hacia arriba (en un 1) o hacia abajo (en un 0). 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).

Redondear la mitad a par

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 .

Este es el modo de redondeo predeterminado utilizado en operaciones IEEE 754 para resultados en formatos binarios de punto flotante, y el modo más sofisticado [ se necesita aclaración ] utilizado al redondear a cifras significativas.

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.

Redondear la mitad a impar

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 [7] [ 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 ) ] .

Redondeo para prepararse para una precisión más corta

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. [8] 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 .

Redondeo aleatorio a un número entero

Desempate alterno

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.

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.

Desempate aleatorio

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.

redondeo estocástico

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. [9]

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. [9] El redondeo estocástico también es una forma de lograr un tramado unidimensional .

Comparación de enfoques para redondear a un número entero

Redondeo a otros valores

Redondear a un múltiplo específico

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 un solo argumento "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.

Redondeo logarítmico

Redondear a una potencia especificada

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últiplos también se aplican al redondeo a una potencia.

Redondeo escalado

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 .

Redondeo de punto flotante

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.

Donde 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.

Redondear a una fracción simple

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 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 determinada m . Este problema está relacionado con las secuencias de Farey , el árbol de Stern-Brocot y las fracciones continuas .

Redondeo a un valor disponible

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" . [10] [11]

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. [12]

Redondeo en otros contextos

Tramado y difusión de errores

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 Floyd-Steinberg es un procedimiento popular de difusión de errores al digitalizar imágenes.

Como ejemplo unidimensional, supongamos que los números0,9677 ,0,9204 ,0,7451 , y0,3091 ocurren en orden y cada uno debe redondearse a un múltiplo de0,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 , cada uno de los cuales se redondea a un múltiplo de0,01 :0,97 ,1,89 ,2,63 , y2,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 .

Aritmética de Montecarlo

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. [13]

Cálculo exacto con aritmética redondeada.

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.

Doble redondeo

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 1] 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 para igualar, pero daría 9 cuando se redondea a un número entero directamente. Borman y Chatfield [14] 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. [15]

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 . [16] [17] 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. [18]

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 . [19] De manera equivalente, consiste en devolver el resultado intermedio cuando es exactamente representable, y el número de coma flotante más cercano con significado impar en caso contrario; por eso también se le conoce como redondeo a impar . [20] [21] 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.

El dilema del fabricante de mesas

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. [22]

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. [23] 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.

Interacción con búsquedas de cadenas

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.

Historia

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. [37] 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 a par ha servido como estándar ASTM (E-29) desde 1940. 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 [38], Robert Simpson Woodward llamó a esto "la regla de la computadora", indicando que entonces era de uso común por las computadoras humanas que calculaban tablas matemáticas. Churchill Eisenhart indicó que la práctica ya estaba "bien establecida" en el análisis de datos en la década de 1940. [39]

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 [40] 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. [41]

Funciones de redondeo en lenguajes de programación.

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 [42] ).

Otras normas de redondeo

Algunas disciplinas o instituciones han emitido normas o directivas para el redondeo.

Observaciones meteorológicas de EE. UU.

En una directriz publicada a mediados de 1966, [43] la Oficina del Coordinador Federal de Meteorología de EE. UU . determinó que los datos meteorológicos debían redondearse al número redondo más cercano, con la regla de desempate "redondear 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".

Cero negativo en meteorología

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 ]

Ver también

Notas

  1. ^ Un caso en el que el doble redondeo siempre conduce al mismo valor que el redondeo directo a la precisión final es cuando la base es impar.

Referencias

  1. ^ Isaiah Lankham, Bruno Nachtergaele , Anne Schilling : Álgebra lineal como introducción a las matemáticas abstractas. Científico mundial, Singapur 2016, ISBN  978-981-4730-35-8 , pág. 186.
  2. ^ Kulisch, Ulrich W. (julio de 1977). "Fundamentos matemáticos de la aritmética informática". Transacciones IEEE en computadoras . C-26 (7): 610–621. doi :10.1109/TC.1977.1674893. S2CID  35883481.
  3. ^ Higham, Nicolás John (2002). Precisión y estabilidad de algoritmos numéricos . pag. 54.ISBN _ 978-0-89871-521-7.
  4. ^ ab "java.math.RoundingMode". Oráculo.
  5. ^ ab "decimal - Aritmética decimal de coma fija y coma flotante". Fundación de software Python.
  6. ^ Manual de normas de redacción de ingeniería (NASA), X-673-64-1F, p90
  7. ^ Anexo 1 de la Ley de moneda decimal de 1969
  8. ^ Principios de funcionamiento de IBM z/Architecture
  9. ^ ab Gupta, Suyog; Angrawl, Ankur; Gopalakrishnan, Kailash; Narayanan, pritish (9 de febrero de 2016). "Aprendizaje profundo con precisión numérica limitada". pag. 3. arXiv : 1502.02551 [cs.LG].
  10. ^ "Reguladores de voltaje de diodo Zener" (PDF) . Archivado (PDF) desde el original el 13 de julio de 2011 . Consultado el 24 de noviembre de 2010 .
  11. ^ "Construir un probador de espejos"
  12. ^ Bruce Trump, Christine Schneider. "La fórmula de Excel calcula valores de resistencia estándar del 1%". Diseño Electrónico , 2002-01-21. [1]
  13. ^ Parker, D. Stott; Eggert, Paul R.; Pierce, Brad (28 de marzo de 2000). "Aritmética de Montecarlo: un marco para el análisis estadístico de errores de redondeo". Computación IEEE en ciencia e ingeniería.
  14. ^ Borman, Phil; Chatfield, Marion (10 de noviembre de 2015). "Evite los peligros de utilizar datos redondeados". Revista de Análisis Farmacéutico y Biomédico . 115 : 506–507. doi :10.1016/j.jpba.2015.07.021. PMID  26299526.
  15. ^ Deborah R. Hensler (2000). Dilemas de las demandas colectivas: perseguir objetivos públicos para obtener beneficios privados . RAND. págs. 255–293. ISBN 0-8330-2601-1.
  16. ^ Samuel A. Figueroa (julio de 1995). "¿Cuándo es inofensivo el doble redondeo?". Boletín ACM SIGNUM . ACM. 30 (3): 21-25. doi : 10.1145/221332.221334 . S2CID  14829295.
  17. ^ Roger Golliver (octubre de 1998). "Producción eficiente de resultados dobles IEEE ortogonales predeterminados utilizando hardware IEEE extendido" (PDF) . Intel.
  18. ^ Darcy, Joseph D. "JEP 306: Restaurar la semántica de punto flotante siempre estricta" . Consultado el 12 de septiembre de 2021 .
  19. ^ Moore, J. Strother; Lynch, Tom; Kaufmann, Matt (1996). "Una prueba comprobada mecánicamente de la corrección del núcleo del algoritmo de división de punto flotante AMD5K86" (PDF) . Transacciones IEEE en computadoras . 47 . CiteSeerX 10.1.1.43.3309 . doi : 10.1109/12.713311 . Consultado el 2 de agosto de 2016 . 
  20. ^ Boldo, Sylvie ; Melquiond, Guillaume (2008). "Emulación de una FMA y sumas correctamente redondeadas: algoritmos probados que utilizan el redondeo a impar" (PDF) . Transacciones IEEE en computadoras . 57 (4): 462–471. doi :10.1109/TC.2007.70819. S2CID  1850330 . Consultado el 2 de agosto de 2016 .
  21. ^ "21718 - el redondeo real.c no es perfecto". gcc.gnu.org .
  22. ^ Kahan, William Morton . "Un logaritmo demasiado inteligente a la mitad" . Consultado el 14 de noviembre de 2008 .
  23. ^ Müller, Jean-Michel; Brisebarre, Nicolás; de Dinechin, Florent; Jeannerod, Claude-Pierre; Lefèvre, Vicente; Melquiond, Guillaume; Revol, Nathalie ; Stehlé, Damián; Torres, Serge (2010). "Capítulo 12: Resolver el dilema del fabricante de mesas". Manual de aritmética de coma flotante (1 ed.). Birkhäuser . doi :10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN  2009939668.
  24. ^ "NA Digest domingo, 18 de abril de 1999 Volumen 99: Número 16". 18 de abril de 1999 . Consultado el 29 de agosto de 2022 .
  25. ^ "Biblioteca de matemáticas para Java". Archivado desde el original el 8 de mayo de 1999.
  26. ^ "Biblioteca matemática portátil precisa". Archivado desde el original el 7 de febrero de 2005.
  27. ^ mathlib en GitHub .
  28. ^ "libultim: biblioteca definitiva de funciones elementales correctamente redondeada". Archivado desde el original el 1 de marzo de 2021.
  29. ^ "Git - glibc.git/commit". Fuenteware.org . Consultado el 18 de julio de 2022 .
  30. ^ de Dinechin, Florent; Lauter, Christoph; Muller, Jean-Michel (enero-marzo de 2007). "Logaritmos rápidos y correctamente redondeados en doble precisión". RAIRO-Teor. inf. Aplica . 41 (1): 85-102. CiteSeerX 10.1.1.106.6652 . doi :10.1051/ita:2007003. HAL  ensl-00000007v2. 
  31. ^ "CRlibm: biblioteca matemática correctamente redondeada". Archivado desde el original el 27 de octubre de 2016.
  32. ^ crlibm en GitHub
  33. ^ "libmcr - biblioteca de funciones elementales correctamente redondeada". Archivado desde el original el 25 de febrero de 2021.
  34. ^ libmcr en GitHub .
  35. ^ "El proyecto CORE-MATH" . Consultado el 30 de agosto de 2022 .
  36. ^ Sibidanov, Alexei; Zimmerman, Paul; Glondu, Stéphane (2022). El proyecto CORE-MATH. 29º Simposio IEEE sobre aritmética informática (ARITH 2022) . Consultado el 30 de agosto de 2022 .
  37. ^ Duncan J. Melville. "Tableta de arcilla YBC 7289". 2006
  38. ^ Probabilidad y teoría de los errores. Monografías matemáticas, núm. 7. J. Wiley e hijo. 1906. {{cite book}}: |website=ignorado ( ayuda )
  39. ^ Churchill Eisenhart (1947). "Efectos del redondeo o agrupación de datos". En Eisenhart; Hastay; Wallis (eds.). Técnicas Seleccionadas de Análisis Estadístico para la Investigación Científica e Industrial, e Ingeniería de Producción y Gestión . Nueva York: McGraw-Hill. págs. 187–223 . Consultado el 30 de enero de 2014 .
  40. ^ "La introducción del euro y el redondeo de las cantidades monetarias" (PDF) . Archivado (PDF) desde el original el 9 de octubre de 2010 . Consultado el 19 de agosto de 2011 .
  41. ^ Baten, Jörg (2009). "Cuantificación de la alfabetización cuantitativa: acumulación de edades y la historia del capital humano" (PDF) . Revista de Historia Económica . 69 (3): 783–808. doi :10.1017/S0022050709001120. hdl : 10230/481 . S2CID  35494384.
  42. ^ "Especificación del lenguaje ECMAScript ECMA-262" (PDF) . ecma-international.org .
  43. ^ OFCM, 2005: Manual meteorológico federal n.º 1 Archivado el 20 de abril de 1999 en Wayback Machine , Washington, DC., 104 págs.

enlaces externos