2010-10-19 5 views
1

J'ai fait un cours à l'université qui expliquait (entre autres choses) comment commander votre exécution mathématique pour maximiser la précision et réduire le risque d'erreurs d'arrondi dans un environnement de précision finie.Précision numérique dans les calculs financiers simples

Nous travaillons sur un système financier avec vos calculs d'intérêts habituels et autres. Quelqu'un peut-il partager/me rappeler comment structurer vos calculs pour minimiser la perte de précision?

Je sais que, par exemple, la division doit être évitée. Aussi, lorsque vous divisez, divisez le plus grand nombre en premier, si possible.

+0

Oui je suis d'accord, je dois le faire aussi. –

Répondre

5

La règle cardinale du calcul numérique est d'éviter de soustraire des nombres presque égaux. La multiplication et la division sont toujours précises: vous perdez au plus un peu de précision dans l'exécution d'une multiplication ou d'une division. Mais si deux nombres acceptent n bits, vous pouvez perdre jusqu'à n bits de précision dans leur soustraction.

Il existe toutes sortes de trucs pour éviter de telles soustractions. Par exemple, supposons que vous deviez calculer exp (x) - 1 pour les petites valeurs de x. (C'est quelque chose que vous pourriez faire dans un calcul d'intérêt.) Si x est si petit que exp (x) est égal à 1 à toute la précision de l'ordinateur, alors la soustraction donnera exactement 0, et l'erreur relative résultante sera 100% . Mais si vous utilisez l'approximation de Taylor exp (x) - 1 = x + x^2/2 + ... vous pourriez obtenir une réponse plus précise. Par exemple, exp (10^-17) - 1 sera complètement inexact, mais 10^-17, l'approximation de Taylor à un terme, serait très précise. C'est ainsi que fonctionnent les fonctions expm1. Voir l'explication de log1p et expm1here.

Si vous êtes préoccupé par la précision numérique, vous devez comprendre le anatomy of floating point numbers afin de savoir ce qui est sûr et ce qui ne l'est pas.

+2

En soustrayant, si un nombre est très grand et l'autre est petit, le résultat sera le même grand nombre inchangé; et cela répété plusieurs fois peut céder à une dérive significative aussi. – fortran

+0

Aha! Je me souviens maintenant de l'approximation de Taylor utilisée dans ce contexte. Vous faites exactement le genre d'arguments que je cherchais. Vous n'avez aucune source en ligne sur laquelle je peux continuer à lire? Je vais vérifier votre blog bientôt. –

+1

Outre les liens dans ma réponse, vous pouvez regarder http://www.johndcook.com/blog/2010/07/27/sine-approximation-for-small-x/. Il s'agit plus particulièrement de fonctions sinus, mais plus généralement, il s'agit d'approximations de Taylor, d'erreurs relatives, etc. –

5

Utilisez les montants en cents, pas en dollars.

3

La perte de précision est généralement liée à l'utilisation de représentations binaires en virgule flottante. Un système financier ne devrait pas utiliser de telles représentations et utiliser à la place des nombres de précision arbitraires (tels que BigDecimal en Java et décimal en .NET). Cela devrait être votre premier mouvement.

+0

Oui, nous travaillons déjà avec des décimales. –

Questions connexes