2009-07-30 9 views
6

Tiene arbitrary-precision arithmetic afectado numerical analysis software?Tiene un software de análisis numérico afectado aritmético de precisión arbitraria?

Creo que la mayoría del software de análisis numérico sigue usando los mismos flotantes y dobles.

Si estoy en lo cierto, me gustaría saber la razón, ya que en mi opinión hay algunos cálculos que pueden beneficiarse del uso de la aritmética de precisión arbitraria, particularmente cuando se combina con el uso de números racionales representación, como se ha hecho en el GNU Multi-Precision Library.

Si me equivoco, los ejemplos serían agradables.

+0

Qué cálculos estás pensando cuando se dice que podrían beneficiarse de precisión arbitraria? –

+0

Tuve una función estadística iterativa que obtuvo resultados muy extraños después de un gran número de operaciones, el cambio a una mayor precisión solo retrasó el problema. la solución fue usar aritmética de precisión arbitraria. –

Respuesta

7

La precisión arbitraria es lenta. Muy lento. Y en el momento en que utiliza una función que produce un valor irracional (como la mayoría de las funciones trigonométricas), pierde su ventaja de precisión arbitraria.

Entonces, si no necesita, o no puede usar esa precisión, ¿por qué gastar todo ese tiempo de CPU en ella?

+0

Esta fue mi corazonada también – Draemon

+3

Sí. Una gran cantidad de análisis numérico no se trata tanto de obtener la respuesta como de hacerlo rápido. Se usa en algunos problemas terriblemente grandes, y ralentizarlo en un orden de magnitud o más no se ve como factible. –

+0

Que por su respuesta, supongo que la velocidad es un factor, pero sospecho que con las computadoras rápidas de hoy en día, y una biblioteca muy optimizada (gmp), no es muy lento.Creo que con un valor irracional no pierdes la ventaja de la precisión arbitraria, ya que puedes almacenarla tan precisa como lo desees, más precisa que en un arbitrario fijo. Una solución mejor pero más complicada para los números irracionales que surgen de tales funciones trigonométricas puede ser el uso de cálculos simbólicos. –

1

Si observa programas como Mathematica, sospecho que encontraría que no usan flotadores y dobles para su trabajo. Si miras la criptografía, definitivamente encontrarás que no usan flotadores y dobles (pero de todos modos trabajan principalmente con números enteros).

Es básicamente una llamada de juicio. Las personas que sienten que su producto se beneficiará de una mayor precisión y precisión utilizan software de aritmética de precisión arbitraria o precisión extendida. Aquellos que no creen que la precisión es necesaria no lo usarán.

+0

Sí, de acuerdo con http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic algunos software de álgebra computacional usan aritmética de precisión arbitraria (al menos hasta cierto punto) –

1

La precisión arbitraria no funciona bien con valores irracionales. Creo que darle la vuelta a todo ayudaría al software de análisis numérico. En lugar de calcular cómo se necesita la precisión para el cálculo, debe decirle al software cuál es la precisión final y resolverá todo.

De esta manera puede usar un tipo de precisión finita lo suficientemente grande para el cálculo.

+0

Solo para reiterar, el cálculo de precisión arbitrario se puede hacer para algebraicos números (como sqrt (2)). El problema aparece cuando queremos calcular números trascendentales, como sqrt (Pi). – SplittingField

1

Es muy raro que necesite una respuesta exacta a un problema numérico; casi siempre es el caso que necesita el resultado con cierta precisión. También es cierto que las operaciones son más eficientes si las realiza un hardware dedicado. Tomados en conjunto significa que hay presión sobre el hardware para proporcionar implementaciones que tengan suficiente precisión para la mayoría de los problemas comunes.

Por lo tanto, la presión económica ha creado una solución eficiente (es decir, basada en hardware) para los casos comunes.

7

Tiene aritmética de precisión arbitraria ¿software de análisis numérico afectado? Creo que la mayoría del software de análisis numérico sigue usando los mismos flotantes y dobles .

Existen varias razones desafortunadas por las que la precisión arbitraria (ap) no se usa más extensamente.

  • La falta de soporte para funciones importantes: los valores que faltan para el NaN/infinitos, no hay números complejos o funciones especiales, carencia o con errores implementación de modos de redondeo (alrededor de media aun no se han aplicado en GMP), la falta de controladores para eventos importantes (pérdida de dígitos significativos, desbordamiento, desbordamiento ... vale, esto ni siquiera está implementado en la mayoría de las bibliotecas estándar). ¿Por qué es esto importante? Porque sin eso debe invertir mucha energía para formular su problema con precisión arbitraria (¿alguna vez escribió una biblioteca de números complejos o funciones especiales en ap?), No puede reproducir su doble resultado porque carece de las funciones que necesita para rastrear los cambios .

  • 99,9% de los programadores no están interesados ​​en absoluto en los números. Una de las preguntas más frecuentes aquí es: "¿Por qué 0.1 + 0.1 NO 0.2 ???? AYUDA !!!" Entonces, ¿por qué deberían los programadores invertir tiempo para aprender una implementación de API específica y formular su problema en ella? Si los resultados de su p difieren de los resultados dobles y no tiene conocimiento de los números, ¿cómo puede encontrar el error? ¿La doble precisión es demasiado inexacta? ¿La biblioteca ap es un error? QUE ESTA PASANDO ?! Quién sabe ....

  • Muchos expertos numéricos que sabe saben cómo calcular desalentar el uso de ap. Frustado por las implementaciones de hardware de FP, insisten en que la reproducibilidad es de todos modos "imposible" de implementar y los datos de entrada casi siempre tienen solo unos pocos dígitos significativos. Entonces, principalmente analizan la pérdida de precisión y reescriben las rutinas críticas para minimizarla.

  • Benchmark addiction. Guau, mi computadora es MÁS RÁPIDA que otras. Como comentaron correctamente los demás comentaristas, ap es mucho más lento que los tipos de datos de punto flotante compatibles con hardware porque debe programarlo con los tipos de datos enteros por mano. Uno de los peligros inminentes de esta actitud es que los programadores, totalmente ajenos a los problemas, eligen soluciones que escuchan números totalmente absurdos. Soy muy cauteloso con GPGPU. Claro, las tarjetas gráficas son mucho, mucho más rápidas que el procesador, pero la razón es menos precisión y exactitud. Si usa flotantes (32 bits) en lugar de dobles (64 bits), tiene mucho menos bits para calcular y transferir. El ojo humano es muy tolerante a fallas, por lo que no importa si uno o dos resultados están fuera de los límites. Diablos, como constructor de hardware puede usar cálculos imprecisos y mal redondeados para acelerar sus cálculos (lo cual está realmente bien para los gráficos). Deseche esos molestos modos de implementación o redondeo subnormal. Hay una muy buena razón por la cual los procesadores no son tan rápidos como las GPU.

puedo recomendar William Kahans página link text por alguna información acerca de los problemas en los valores numéricos.

+0

Gracias por su respuesta, ¿cómo puede perder dígitos significativos, desbordamiento, desbordamiento con precisión arbitraria? –

+1

Oh, eso es fácil. Desbordamiento: Imagina arcotangente (1/x) que es 90 ° o pi/2 para x == 0. El doble puede calcularlo por retorno infinito positivo que es un argumento válido para arcotangente. Entonces necesita desbordamiento e infinidades en ap para manejar estos casos. La pérdida de dígitos significativos ocurre con expresiones algebraicas (sqrt!) Y trascendentales: al tener infinitamente muchos dígitos, debe rodearlos. Si resta números que están muy juntos (por ejemplo, diferenciación numérica), a veces no se puede evitar la pérdida de dígitos significativos. exp (-x) puede causar fácilmente underflow incluso con ap. –

+0

@Thorsten, gracias por su respuesta muy informativa. –

2

Wolfram Research Institute hizo un gran esfuerzo para obtener aritmética de intervalos de precisión arbitraria en el núcleo de Mathematica de una manera pragmática e hicieron un excelente trabajo. Mathematica hará de forma transparente casi cualquier cálculo con precisión arbitraria.

1

Este paper de Dirk Laurie presenta una historia de advertencia sobre el uso de precisión variable.

+0

Gracias @ J.M. , un documento interesante de hecho. (El jurado ha hablado) –

0

Aunque no está directamente relacionada con su pregunta también puede que desee ver en este paper por l Trefethen

Cuestiones relacionadas