2010-07-02 4 views
4

Nous utilisons actuellement System.Decimals pour représenter les nombres dans une application .NET que nous développons. Je sais que les décimales sont conçues pour minimiser les erreurs dues à l'arrondissement, mais je sais aussi que certains nombres, 1/3 par exemple, ne peuvent pas être représentés sous forme décimale, donc certains calculs auront une petite erreur d'arrondi. Je crois que l'ampleur de cette erreur sera très petite et insignifiante, mais un collègue n'est pas d'accord. Je voudrais donc être en mesure d'estimer l'ordre de grandeur de l'erreur due à l'arrondissement dans notre application. Supposons, par exemple, que nous calculons un total cumulé de "deals" et que nous effectuions environ 10 000 "deals" par jour et qu'il y ait environ 5 à 10 opérations décimales (add, sub, div, mul etc.) pour calculer le total cumulé nouveau total cumulé pour chaque transaction reçue, quel serait l'ordre du magnat de l'erreur ronde? Une réponse avec une procédure de calcul de ce serait également bien, donc je peux apprendre comment le faire pour moi-même dans le futur.Estimation d'erreur sur les calculs utilisant des décimales

+1

La décimale peut représenter jusqu'à 28 décimales - elle convient aux opérations monétaires. Si vous êtes intelligent dans vos opérations, vous pouvez limiter la division et la multiplication ou mettre en œuvre des contre-mesures afin d'éliminer l'imprécision de division/multiplication (en utilisant l'arrondi + la soustraction ou d'autres méthodes). Les valeurs monétaires directes n'auront pas beaucoup d'espaces décimaux, donc l'addition/la soustraction est sûre. Certaines divisions folles (si cumulatives) entraîneront des pertes, peu importe l'ampleur du type de données utilisé (si vous n'utilisez pas de contre-mesures). –

+0

Une chose dont je n'ai jamais été sûr, je comprends qu'un nombre décimal peut représenter jusqu'à 28 décimales, mais cela change-t-il lorsque le nombre décimal augmente? c'est-à-dire qu'une décimale qui contient une valeur d'un million peut-elle encore avoir 28 places après la virgule décimale? – Robert

+0

Oui - la décimale est un point fixe, donc la précision est la même pour les grands et les petits nombres. http://msdn.microsoft.com/en-us/library/system.decimal.aspx –

Répondre

1

What Every Computer Scientist Should Know About Floating-Point Arithmetic va dans le détail sur l'estimation de l'erreur dans le résultat d'une séquence d'opérations en virgule flottante, compte tenu de la précision du type virgule flottante. Je n'ai pas essayé cela sur un programme pratique, donc j'aimerais savoir si c'est faisable.

+0

Aurait été bien si quelqu'un aurait pu traduire en mots d'une syllabe pour moi, mais je suppose que c'est la bonne réponse. – Robert

Questions connexes