Discuss Scratch

Lepus-Lacarotte
Scratcher
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
wilhelm43
Scratcher
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).
Etoiles_de_Feu
Scratcher
33 posts

Bug de calcul sur Scratch

wilhelm43 wrote:

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
Scratcher
33 posts

Bug de calcul sur Scratch

Lepus-Lacarotte wrote:

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

Comme dit par @ wilhelm43, celà n'est pas un bug mais une erreur informatique.
ababoin07
Scratcher
500+ posts

Bug de calcul sur Scratch

Lepus-Lacarotte wrote:

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
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
Lepus-Lacarotte
Scratcher
37 posts

Bug de calcul sur Scratch

ababoin07 wrote:

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
Si 0,1 est irrationnel en base 2, alors 0,2 aussi.
LL
everwinner64
Scratcher
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 !

Last edited by everwinner64 (Dec. 8, 2024 14:15:33)

Lepus-Lacarotte
Scratcher
37 posts

Bug de calcul sur Scratch

Mais simplement, qu'est-ce-que la virgule a de flottante ?
LL
wilhelm43
Scratcher
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).
([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)

Powered by DjangoBB