Comment surmonter les pièges de l'arithmétique à virgule flottante pour des calculs précis ?

DDD
Libérer: 2024-10-21 14:53:02
original
574 Les gens l'ont consulté

How to Overcome Pitfalls in Floating Point Arithmetic for Accurate Calculations?

Pièges de l'arithmétique à virgule flottante : comment les surmonter

L'arithmétique à virgule flottante basée sur la décimale, couramment utilisée dans les langages de programmation comme Python, peut introduire des erreurs subtiles en raison de sa nature approximative. Comprendre ces erreurs est crucial pour des calculs précis.

Le problème

Considérez la fonction Python suivante pour estimer les racines carrées à l'aide de l'addition à virgule flottante :

<code class="python">def sqrt(num):
    root = 0.0
    while root * root < num:
        root += 0.01
    return root
Copier après la connexion

Cette fonction produit cependant des résultats imprécis :

<code class="python">>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>
Copier après la connexion

Le problème avec la virgule flottante

Le problème réside dans le fait que les valeurs à virgule flottante de Python ne sont pas des représentations exactes de nombres décimaux. Au lieu de cela, ils utilisent une représentation binaire, ce qui peut conduire à des inexactitudes lorsqu'il s'agit de nombres qui ne peuvent pas être représentés avec précision sous forme binaire.

Dans l'exemple de fonction, l'ajout de 0,01 n'équivaut pas à l'ajout de 1/100 en raison de cette représentation approximative. La valeur ajoutée réelle est légèrement supérieure à 1/100, ce qui conduit à une légère surestimation.

Surmonter les erreurs en virgule flottante

Pour éviter ces erreurs, envisagez les stratégies suivantes :

  • Utiliser le module décimal :

Le module décimal Python fournit un type alternatif, Decimal, qui utilise une représentation à virgule fixe basée sur des décimales. Cela offre des calculs plus précis, comme le montre la fonction modifiée :

<code class="python">from decimal import Decimal as D

def sqrt(num):
    root = D(0)
    while root * root < num:
        root += D("0.01")
    return root</code>
Copier après la connexion
  • Utiliser des valeurs binaires représentables :

S'en tenir à la virgule flottante des ajouts qui représentent des fractions binaires exactes, telles que 0,125 (1/8) ou 0,0625 (1/16). Cela garantit que les ajouts sont précis sans introduire d'erreurs d'arrondi.

Comprendre et surmonter les erreurs en virgule flottante est essentiel pour des calculs numériques précis. En employant des stratégies appropriées, les développeurs peuvent minimiser ces erreurs et obtenir des résultats plus précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!