¿Cuál es la mejor manera de explicar el problema de redondeo de punto flotante a los clientes ?
Lo sé
http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html
así como las entradas en las preguntas frecuentes de C ++ y otras páginas dirigidas a desarrolladores y científicos, pero ¿hay una página web, un artículo o una explicación dirigida a clientes "regulares" con antecedentes matemáticos o científicos limitados? (para lo cual las referencias anteriores caen de plano).
Si se mantuviera o viniera de una institución o corporación bien conocida y reconocida, mucho mejor, dado que, como algunos de ustedes podrían haber experimentado, puede ser un poco complicado explicarlo usted mismo.
customer-relations
Eric Grange
fuente
fuente
Respuestas:
Encuentro una manera simple de explicar esto es demostrarlo . Discuta cómo dividirlo
x
por un número y luego multiplicarlo por el mismo número debería devolverlox
nuevamente; haga que el cliente acepte que este siempre debería ser el caso. Luego haz lo viejo(100 / 3) * 3
en una calculadora; demuestre que el valor no regresa, como era de esperar, a 100. Cuando la mayoría de las personas ven que las matemáticas aparentemente simples se "descomponen", entonces tienden a "obtener" el peligro de los números de coma flotante donde la precisión es importante (aunque de forma intuitiva forma, en lugar de al nivel bajo en el que apunta el artículo).Desafortunadamente, la mayoría de las calculadoras medio decentes (ciertamente todas las científicas que he visto, y más que algunas básicas) hoy en día pueden manejar esto, supongo que están almacenando dígitos adicionales más allá de lo que se puede mostrar y redondear, así que verifique qué tan inteligente es su calculadora antes de hacerlo frente a su cliente.
fuente
No creo que haya atajos. Tienes que:
O, si eso es demasiado necesario, solo tienes que:
Tal vez un ejemplo con números irracionales ayuda (a pesar de los problemas de punto flotante se aplican a los números racionales también):
sqrt(2) ~ 1.414
. Entonces1.414^2 = 1.999396
. No importa cuántos dígitos tome, nunca volverá al original2
. Ok, 4 dígitos significativos correctos pueden ser aceptables, pero luego considere lo que sucede cuando se acumula este tipo de "errores de redondeo". Ahí es donde está el verdadero peligro.fuente
Primero, determine de qué se quejan. Las transacciones financieras deben hacerse con precisión, con el número correcto de decimales y las reglas de redondeo correctas. Esto generalmente significa mantener números enteros de unidades monetarias y asegurarse de que la aritmética se haga correctamente.
Alternativamente, pueden estar quejándose de pantallas sobreextraídas, y reducir todo el número de dígitos significativos puede ser todo lo que se necesita.
Para los números en general, siempre puede intentar obtener una x decimal de tres dígitos tal que x * 3 sea 10. Eso muestra los principios básicos.
Hay dos problemas restantes. Una es que ciertos números se pueden expresar exactamente en decimal pero no binario (3.15, por ejemplo). Eso será difícil de explicar a personas no técnicas, y su mejor opción es tratar de evitarlo al no proporcionar suficientes dígitos significativos para que aparezca. El otro es el cliente que sabe un poco, lo suficiente como para saber que la aritmética de la computadora no siempre es exacta y no lo suficiente como para darse cuenta de que la aritmética decimal no siempre es exacta. He discutido con algunos de esos, y no tengo nada útil que informar.
fuente
Los números de punto flotante en las computadoras usan binario, así que al igual que tenemos un sistema de números con columnas de uno, decenas, cientos y décimos, centésimos, los números de punto flotante en las computadoras en realidad tienen un, dos, cuatro y mitades, cuartos y octavas columnas. Si el cliente está familiarizado con los pies / pulgadas, recuérdeles cómo usa típicamente fracciones de base 2 de una pulgada para medir.
Ahora intente almacenar 10 centavos como una combinación de mitades, cuartos, octavos de dólar. Simplemente no funciona:
.00011001100110011. . . (se repite infinitamente )
Es lo mismo que tomar una cinta métrica imperial estándar y tratar de medir una décima de pulgada. No puedes hacerlo con precisión. No hay representación de 1/10 como X / Y donde X e Y son números enteros e Y es una potencia de 2.
Es por eso que tenemos los tipos de datos decimales que usan 4 bits para almacenar cada dígito decimal , por lo que volvemos a la representación de base 10. La compensación está en el espacio y el rendimiento (aproximadamente un 100% de rendimiento, por lo que he leído).
fuente
Dígales que al igual que su cuenta bancaria no puede contener 4.4423425908459032890413 ... dólares (son $ 4.44 o $ 4.45, nada en el medio), la computadora no puede almacenar fácilmente un número con precisión arbitraria. Las imperfecciones del almacenamiento conducen a imperfecciones de los cálculos.
(Es un poco engañoso, pero debería darles una idea de cuál es el problema).
fuente
2/3
Pídales que escriban la respuesta exacta a dos dividida por 3.
Como la respuesta "continúa para siempre", puede señalarlo.
El uso de 1/3 también funcionaría, pero 2/3 es quizás un ejemplo un poco mejor ya que el redondeo le da (por ejemplo) .6666667 mientras que .3333333 parece que simplemente se puede truncar.
fuente
fuente
Algunos cálculos se realizan de acuerdo con alguna norma legal. Por ejemplo, si desea calcular cuánto impuesto sobre la renta debe pagarse sobre un ingreso anual imponible de € 79.245,18 en Alemania, solo hay una respuesta correcta. Lo haces bien o lo haces mal. Si lo hace bien, no necesita explicar cómo funciona la aritmética de coma flotante. Si se equivoca, no necesita explicar cómo funciona la aritmética de coma flotante, debe corregir su código roto.
A veces, muestra resultados que no se ven bien. Por ejemplo, si convierte US $ 13,297.46 en UK £ con dos dígitos decimales y luego convierte esa cantidad de UK £ a US $, es posible que no obtenga US $ 13,297.46 pero US $ 13,297.45 o US $ 13,297.47. Eso no tiene nada que ver con la aritmética de coma flotante. Es un problema inevitable y es mejor que puedas explicar por qué es inevitable. (También debe saber por qué el problema no ocurre cuando realiza la conversión de UK £ a US $ y viceversa).
Hay otros resultados posibles que no se ven bien. Si convierte números a porcentajes, los porcentajes deberían sumar 100%, pero podrían no serlo. Si muestra cuatro porcentajes con dos decimales, los cuatro porcentajes mostrados podrían sumar 99.99% o 100.01%. Nada que ver con la aritmética de coma flotante. Aún así, deberías poder explicar por qué.
Luego, hay situaciones en las que el uso descuidado de la aritmética de punto flotante conduce a resultados inapropiados. Por ejemplo, a + b + c generalmente no es lo mismo que b + c + a. Si eso causa un problema, no hay nada que explicar, es algo que arregla.
fuente