Python 0.1+0.2
Bonjour,
est-il utile de faire remarquer à des élèves de seconde le souci soulevé par ce calcul tout simple sur Python ?
on lui tape 0.1+0.2
Il sort : 0.30000000000004
Pas ce souci si on tape 0.1+0.3
> Ecriture en base 2 ....etc....
Y a-t-il un moyen sur Python de corriger ce tir ?
est-il utile de faire remarquer à des élèves de seconde le souci soulevé par ce calcul tout simple sur Python ?
on lui tape 0.1+0.2
Il sort : 0.30000000000004
Pas ce souci si on tape 0.1+0.3
> Ecriture en base 2 ....etc....
Y a-t-il un moyen sur Python de corriger ce tir ?
Réponses
-
Oui, avec le module decimal.Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
C'est-à-dire c'est une bibliothèque ?
-
Oui (attention à la casse).
>>> from decimal import Decimal >>> Decimal("0.1")+Decimal("0.2") Decimal('0.3') >>> Decimal(0.1)+Decimal(0.2) Decimal('0.3000000000000000166533453694')
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
donc on a le même problème.... ^^
-
Essaie ce pis-aller :
>>> def d(n): ... return Decimal(str(n)) ... >>> d(0.1) Decimal('0.1') >>> d(0.1)+d(0.2) Decimal('0.3') >>> d(0.1+0.2) Decimal('0.30000000000000004')
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Ok merci !
-
Comme énormément de langages.
Il existe un module sur les fractions.>>> from fractions import Fraction >>> Fraction("2/6") Fraction(1, 3) >>> Fraction("2/6")+Fraction("4/15") Fraction(3, 5)
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
ce n'est pas un problème de langage mais bien un problème de codage informatique; le résultat est le même sous Julia et Scilab (double)
--> a=0.1+0.2 a = 0.3 --> printf("%.20lf\n",a) 0.30000000000000004000
julia> 0.1+0.2 0.30000000000000004
Paul -
Pourquoi la calculatrice ne fait pas ce bug ? Elle est programmée pour faire des arrondis ?
(désolé si ma question est naïve mais je mets juste le nez dans ces problèmes) -
Je pense que c'est surtout une politique d'affichage. Sans doute la calculatrice affiche-t-elle moins que ce qui est stocké.
-
En fait non, les constructeurs de calculatrices sont confrontes au probleme depuis longtemps, et certains ont developpe des solutions qui ne sont pas simplement un affichage arrondi. Chez HP, les anciennes 48 et leur famille utilisaient un microprocesseur (Saturn) capable d'additionner/soustraire en BCD (i.e. on utilise un quartet=4 bits pour coder un chiffre de l'ecriture en base 10). Les nouvelles HP ont une librairie pour calculer avec des flottants BCD dans Home (pas dans CAS, ou les flottants sont en base 2 avec troncature a 48 bits de mantisse). Je pense que TI et Casio ont des solutions analogues a HP.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 52 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres