2009-04-06 17 views
5

Está claro que no se debe usar la precisión flotante cuando se trabaja con, por ejemplo, montos monetarios, ya que la variación en la precisión conduce a imprecisiones al hacer cálculos con esa cantidad.¿Cuándo es apropiado usar tipos de datos de precisión flotante?

Dicho esto, ¿qué son casos de uso cuando eso es aceptable? Y, ¿cuáles son los principios generales que uno debería tener en cuenta a la hora de decidir?

Respuesta

3

Se deben usar números flotantes para los que fueron diseñados: cálculos donde lo que usted quiere es una precisión fija, y solo le importa que su respuesta sea precisa dentro de una cierta tolerancia. Si necesita una respuesta exacta en todos los casos, es mejor que use algo más.

Aquí hay tres dominios donde se puede utilizar de punto flotante:

  1. simulaciones científicas
    aplicaciones de ciencias requieren una gran cantidad de cálculos numéricos, y con frecuencia utilizan métodos numéricos sofisticados para resolver sistemas de ecuaciones diferenciales. Por lo general, estás hablando de punto flotante de precisión doble aquí.

  2. Juegos
    Piense en los juegos como una simulación en la que está bien hacer trampa. Si la física es "lo suficientemente buena" como para parecer real, entonces está bien para los juegos, y puede compensar en la experiencia del usuario lo que le falta en términos de precisión. Los juegos generalmente usan punto flotante de precisión simple.

  3. Estadísticas
    Al igual que las aplicaciones de la ciencia, los métodos estadísticos necesitan una gran cantidad de coma flotante. Muchos de los métodos numéricos son iguales; el dominio de la aplicación es simplemente diferente. Encontrará muchas estadísticas y simulaciones de monte carlo en aplicaciones financieras y en cualquier campo donde esté analizando una gran cantidad de datos de encuestas.

punto flotante no es trivial, y para la mayoría de las aplicaciones de negocio que realmente no necesita saber todas estas sutilezas. Estás bien simplemente sabiendo que no puedes representar algunos números decimales exactamente en coma flotante, y que debes asegurarte de usar algún tipo de decimal para precios y cosas por el estilo.

Si realmente quiere entrar en los detalles y entender todas las ventajas y desventajas y dificultades, echa un vistazo a la clásica What Every Programmer Should Know About Floating Point, o recoger un libro sobre Numerical Analysis o Applied Numerical Linear Algebra si usted es realmente una aventura.

3

Supongo que quieres decir "punto flotante" aquí. La respuesta es, básicamente, cada vez que las cantidades involucradas son aproximadas, medidas, en lugar de precisas; cada vez que las cantidades involucradas son más grandes de lo que se puede representar convenientemente con precisión en la máquina subyacente; cada vez que la necesidad de velocidad computacional sobrepasa la precisión exacta; y en cualquier momento la precisión apropiada puede mantenerse sin otras complejidades.

Para obtener más detalles de esto, realmente necesita leer un libro de análisis numérico.

1

Es apropiado utilizar tipos de coma flotante cuando se trata de cálculos científicos o estadísticos. Estos invariablemente solo tendrán, digamos, 3-8 dígitos significativos de precisión.

En cuanto a si se deben usar tipos de punto flotante de precisión simple o doble, esto depende de su necesidad de precisión y cuántos dígitos significativos necesita. Normalmente, la gente acaba usando dobles, a menos que tengan una buena razón para no hacerlo.

Por ejemplo, si mide la distancia o el peso o cualquier cantidad física, el número que se obtiene no es exacto: tiene un cierto número de dígitos significativos en función de la precisión de sus instrumentos y sus medidas.

Para cálculos que involucren algo como esto, los números de punto flotante son apropiados.

Además, si se trata de números irracionales, los tipos de punto flotante son apropiados (y realmente son su única opción), por ejemplo, álgebra lineal en la que trata mucho con raíces cuadradas.

El dinero es diferente porque usted generalmente necesita para ser exacto y cada dígito es significativo.

+0

El punto flotante de precisión simple tiene aproximadamente 7 dígitos decimales de precisión, y el punto flotante de precisión doble es aproximadamente 16. – tgamblin

+0

¿Cuál es su punto? – cletus

0

De Wikipedia:

aritmética de punto flotante se encuentra en su mejor cuando se utiliza simplemente para cantidades reales medida durante un amplia gama de escalas (por ejemplo, el período orbital de Io o la masa de del protón) y, en el peor de los casos, cuando se espera que modelice las interacciones de las cantidades expresadas como decimales que se espera que sean exactos.

El punto flotante es rápido pero inexacto. Si eso es una compensación aceptable, use el punto flotante.

1

Creo que deberías preguntar al revés: cuándo no deberías usar el punto flotante. Para la mayoría de las tareas numéricas, el tipo de datos preferido es coma flotante, ya que puede (casi) olvidarse del desbordamiento y otros tipos de problemas que suelen encontrarse con los tipos de enteros.

Una forma de ver el tipo de datos de coma flotante es que la precisión es independiente de la dinámica, es decir si el número es muy pequeño o muy grande (dentro de un rango de curso aceptable), el número de dígitos significativos es aproximadamente lo mismo.

Una desventaja es que los números de coma flotante tienen algunas propiedades sorprendentes, como x == x puede ser falso (si x es nan), no siguen la mayoría de las reglas matemáticas (distributividad, ¡es x (y + z)! = x y + x z). Dependiendo de los valores de z, y y z, esto puede ser importante.

+0

El ejemplo que dio es distributivity. La asociatividad es (x + y) + z = x + (y + z). –

+0

En realidad, la propiedad que ha escrito es distributividad, la asociatividad es a (bc) = (ab) c [similarmente para la suma] – jpalecek

+0

+1 para señalar el problema inherente en la prueba de igualdad con números de punto flotante. – mseery

2

La mayoría de las cantidades reales son inexactos, y por lo general nos conocen sus propiedades numéricas con mucha menos precisión que un valor típico de punto flotante. En casi todos los casos, los tipos C flotantes y dobles son lo suficientemente buenos.

Es necesario conocer algunas de las trampas. Por ejemplo, probar dos números de coma flotante para la igualdad generalmente no es lo que quiere, ya que todo lo que se necesita es un solo error para hacer que la comparación no sea igual. tgamblin ha proporcionado algunas buenas referencias.

La excepción habitual es el dinero, que se calcula exactamente de acuerdo con ciertas convenciones que no se traducen bien en representaciones binarias.Parte de esto son las constantes utilizadas: nunca verá una tasa de interés pi%, o una tasa de interés del 22/7%, pero podría ver una tasa de interés del 3.14%. En otras palabras, los números usados ​​se expresan típicamente en fracciones decimales exactas, no todas las cuales son fracciones binarias exactas. Además, el redondeo en los cálculos se rige por convenciones que tampoco se traducen bien en binario. Esto hace que sea extremadamente difícil duplicar con precisión los cálculos financieros con punto flotante estándar, y por lo tanto las personas usan otros métodos para ellos.

2

La historia breve es que si necesita cálculos exactos, NO USE punto flotante.

No utilice los números de punto flotante como índices de bucle: No quedar atrapados haciendo:

for (d = 0.1; d < 1.0; d+=0.1) 
{ /* Some Code... */ } 

Usted se sorprenderá.

No utilice números de coma flotante como claves para ningún tipo de mapa, ya que nunca puede contar con la igualdad de comportarse como usted espera.

Cuestiones relacionadas