Discuss Scratch
- Discussion Forums
- » Français
- » Bug de calcul sur Scratch
- Lepus-Lacarotte
-
37 posts
Bug de calcul sur Scratch
En faisant des calculs pour m'amuser avec Scratch, j'ai découvert qui calculait certaines choses moins bien que moi (il mettait par exemple que 3.25-3.2=0.0499999999999982). Vous pouvez en voir la démonstration à l'URL : https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1103776170/. Vous pouvez aussi vérifier le code pour vous assurer qu'il n'est pas truqué.
LL
LL
- wilhelm43
-
1000+ posts
Bug de calcul sur Scratch
Ce n'est pas un bug de Scratch, mais une erreur informatique. Si tu veux la comprendre, je t'invite à regarder cet article de Wikipédia :
https://fr.wikipedia.org/wiki/Virgule_flottante
Puis cet article python : https://docs.python.org/fr/2/tutorial/floatingpoint.html
Il est possible de recoder un système de nombres avec des fractions décimales pour créer des nombres décimaux (donc pas réels).
https://fr.wikipedia.org/wiki/Virgule_flottante
Puis cet article python : https://docs.python.org/fr/2/tutorial/floatingpoint.html
Il est possible de recoder un système de nombres avec des fractions décimales pour créer des nombres décimaux (donc pas réels).
- Etoiles_de_Feu
-
33 posts
Bug de calcul sur Scratch
Ce n'est pas un bug de Scratch, mais une erreur informatique. Si tu veux la comprendre, je t'invite à regarder cet article de Wikipédia :
https://fr.wikipedia.org/wiki/Virgule_flottante
Puis cet article python : https://docs.python.org/fr/2/tutorial/floatingpoint.html
Il est possible de recoder un système de nombres avec des fractions décimales pour créer des nombres décimaux (donc pas réels).
En éffet.
- Etoiles_de_Feu
-
33 posts
Bug de calcul sur Scratch
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1103776170/. Vous pouvez aussi vérifier le code pour vous assurer qu'il n'est pas truqué.En faisant des calculs pour m'amuser avec Scratch, j'ai découvert qui calculait certaines choses moins bien que moi (il mettait par exemple que 3.25-3.2=0.0499999999999982). Vous pouvez en voir la démonstration à l'URL :
LL
Comme dit par @ wilhelm43, celà n'est pas un bug mais une erreur informatique.
- ababoin07
-
500+ posts
Bug de calcul sur Scratch
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1103776170/. Vous pouvez aussi vérifier le code pour vous assurer qu'il n'est pas truqué.Problème de conversion de float en binaire, par exemple, 0.1+0.2 donne 0.30000000000000004 puisque 0.1 et/ou (je ne sais pas) 0.2 est irrationnel en base 2 En faisant des calculs pour m'amuser avec Scratch, j'ai découvert qui calculait certaines choses moins bien que moi (il mettait par exemple que 3.25-3.2=0.0499999999999982). Vous pouvez en voir la démonstration à l'URL :
LL
- Lepus-Lacarotte
-
37 posts
Bug de calcul sur Scratch
Si 0,1 est irrationnel en base 2, alors 0,2 aussi. Problème de conversion de float en binaire, par exemple, 0.1+0.2 donne 0.30000000000000004 puisque 0.1 et/ou (je ne sais pas) 0.2 est irrationnel en base 2
LL
- everwinner64
-
100+ posts
Bug de calcul sur Scratch
Voici une explication qui regroupe tout de manière claire:
les nombres à virgule flottante sont stockés sous forme de nombres binaires. Cependant, certains nombres décimaux ne peuvent pas être représentés exactement en binaire, car leur équivalent binaire est une fraction infinie périodique.
• 0.1 en binaire ≈ 0.000110011001100110… (périodique).
• 0.2 en binaire ≈ 0.001100110011001100… (périodique).
Ces représentations infinies sont tronquées (coupées a un endroit fixe) pour tenir dans un nombre limité de bits, Ce qui introduit une petite erreur d’arrondi.
Quand tu additionnes deux nombres flottants (comme 0.1 et 0.2), les erreurs d’arrondi s’accumulent, donc un résultat légèrement différent de la valeur attendue.
Dans ton cas, 3.25 - 3.2 = 0.0499999999999982 est aussi affecté par les limites de précision des nombres flottants, ils ne peuvent pas être représentés exactement en binaire.
• 3.25 en binaire est une fraction exacte (11.01 en binaire)
• Mais, 3.2 en binaire est une fraction infinie périodique (11.0011… en binaire), donc il faut arrondir
Cette arrondi de 3.2 donne une petite erreur lors du calcul de la soustraction. l’ordinateur effectue cette opération avec les approximations des deux nombres et comme 3.2 ne peut pas être représenté de manière exacte, l’erreur d’arrondi apparaît dans le résultat.
Quand je dit « arrondi » j’entends tronqué(e)(s)
J’espère que tu comprends mieux d’où ça vient !
les nombres à virgule flottante sont stockés sous forme de nombres binaires. Cependant, certains nombres décimaux ne peuvent pas être représentés exactement en binaire, car leur équivalent binaire est une fraction infinie périodique.
• 0.1 en binaire ≈ 0.000110011001100110… (périodique).
• 0.2 en binaire ≈ 0.001100110011001100… (périodique).
Ces représentations infinies sont tronquées (coupées a un endroit fixe) pour tenir dans un nombre limité de bits, Ce qui introduit une petite erreur d’arrondi.
Quand tu additionnes deux nombres flottants (comme 0.1 et 0.2), les erreurs d’arrondi s’accumulent, donc un résultat légèrement différent de la valeur attendue.
Dans ton cas, 3.25 - 3.2 = 0.0499999999999982 est aussi affecté par les limites de précision des nombres flottants, ils ne peuvent pas être représentés exactement en binaire.
• 3.25 en binaire est une fraction exacte (11.01 en binaire)
• Mais, 3.2 en binaire est une fraction infinie périodique (11.0011… en binaire), donc il faut arrondir
Cette arrondi de 3.2 donne une petite erreur lors du calcul de la soustraction. l’ordinateur effectue cette opération avec les approximations des deux nombres et comme 3.2 ne peut pas être représenté de manière exacte, l’erreur d’arrondi apparaît dans le résultat.
Quand je dit « arrondi » j’entends tronqué(e)(s)
J’espère que tu comprends mieux d’où ça vient !
Last edited by everwinner64 (Dec. 8, 2024 14:15:33)
- Lepus-Lacarotte
-
37 posts
Bug de calcul sur Scratch
Mais simplement, qu'est-ce-que la virgule a de flottante ?
LL
LL
- wilhelm43
-
1000+ posts
Bug de calcul sur Scratch
Une virgule peut être décalée en multipliant par une puissance de 10 (sur scratch, le bloc suivant).
Cette particularité d'encoder des décimaux en utilisant des puissances de 10 pour faire “flotter” virgule donne le nom de cet objet numérique : un nombre flottant (et non décimal).
([10^ v] of (1)::operators) // retourne 10, pour 2 : retourne 100 (carré), 3 = cube, 4 carré fois carré, etc. Les nombres négatifs retournent l'inverse de l'exposant positif.Dans l'encodage des nombres décimaux sur informatique, on stocke trois informations : un signe, un exposant et une mantisse (une fraction binaire).
Cette particularité d'encoder des décimaux en utilisant des puissances de 10 pour faire “flotter” virgule donne le nom de cet objet numérique : un nombre flottant (et non décimal).
Last edited by wilhelm43 (Dec. 9, 2024 17:25:18)
- Discussion Forums
- » Français
-
» Bug de calcul sur Scratch