Math et Python : histoire d’un bug – épisode 1

J’ai développé en Python, il y a un moment déjà un petit utilitaire qui produit des exercices de trigonométrie (https://site2wouf.fr/exercices_trigonometrie.php) qui les corrige et qui fabrique par la même occasion un pdf avec exercices et corrections.

Oui mais voilà, en récoltant les fruits de mon travail en classe aujourd’hui je tombe sur cet exercice et sa correction et remarque une erreur :

Exercice 1

Dans le triangle RBN rectangle en R, on sait que :

  • BN = 3,7 cm
  • BNR = 30°

Après avoir fait un schéma, calcule la longueur du segment [RB]. (Arrondir au dixième)

Correction

Exercice 1

image/svg+xml R B N ? 3,7 cm 30°

Dans le triangle RBN rectangle en R, on cherche une relation entre l’angle aigu RNB son coté opposé et l’hypoténuse du triangle.

RB / BN

= sin(RNB)

d’où

RB / 3,7

= sin(30°)

On a donc RB = 3,7 × sin(30°) ≈ 1.8 cm

Voyez-vous l’erreur ?

sin(30°)=0.5

3.7sin(30°)=1.85

Python aurait du arrondir à 1,9cm

Lu sur la doc Python :

https://docs.python.org/fr/3.7/library/functions.html?highlight=round#round

Le comportement de round() avec les nombres à virgule flottante peut être surprenant : par exemple round(2.675, 2) donne 2.67 au lieu de 2.68. Ce n’est pas un bug, mais dû au fait que la plupart des fractions de décimaux ne peuvent pas être représentés exactement en nombre a virgule flottante. Voir Arithmétique en nombres à virgule flottante : problèmes et limites pour plus d’information.

Pour Python, avec le module math importé :

>>> sin((radians(30)))
0.49999999999999994

donc en multipliant par 3.7, Python trouvera un résultat très proche de 1,85 mais strictement inférieur donc dont le développement décimal commencera par 1,84… et il arrondira effectivement à 1,8.

En arrondissant (round(sin((radians(30)),5) j’évite le souci mais ne vais-je pas tombé parfois sur le comportement évoqué de round() ?

Mes solutions :

Ma fonction round2

Elle est basée sur l’écriture décimale en tant que chaine de caractère.

def round2(x,nbdigit=0):
    """x est un nombre, la fonction renvoie l'arrondi à nbdigit près
       sans riquer des erreurs d'arrondi comme avec la fonction native   
    
    """
    if not isinstance(x, (int,float)):
        raise NameError("x must be int or float")
        return
    if not isinstance(nbdigit,int):
        raise NameError("nbdigit must be integer")
        return
    if nbdigit<0 :
        raise NameError("error nbdigit <0 ")
        return
    if x<0:
        return -round2(-x)
    #x est un nombre positif, et nbdigit un entier positif
    partie1=str(x).split(".")[0][:-1]
    partie2=str(x).split(".")[0][-1]
    try:
        partie2+=str(x).split(".")[1]
    except:
        pass
    pcorrige=""
    n=0
    while n<=nbdigit:
        try:
            pcorrige+=partie2[n]
            
        except:
            pass
        n+=1
    try:
        suivant=int(partie2[n])
    except:
        suivant =0
    p=partie1+pcorrige[0]
    if len (pcorrige)>1:
            p+="."+pcorrige[1:]
  
    nb=[x for x in p]
    if suivant>4:
        nb=["0"]+nb
        ok=False
        x=len(nb)
        while not ok:
            x-=1
            if nb[x]!=".":
                if int(nb[x])<9:
                    nb[x]=str(int(nb[x])+1)
                    ok=True
                else:
                    nb[x]="0"
    nb=float("".join(nb))
    if nb==int(nb):
        nb=int(nb)
    return nb

On peut comparer avec la fonction native :

round2(2.675,2)
2.68
round(2.675,2)
2.67

Pour le souci avec sinus, j’arrondi simplement (à 15 digits) les retours des lignes trigonométriques.

Un problème subsiste néanmoins : On pourrait parfois (avec sin(30), cos(60) et tan(45) par exemple ) travailler avec des valeurs exactes, et remplacer le signe “environ égal” par un “vrai égal”…

3ème – Objectif lycée (3) – Trigonométrie

Rappel

Vos familles ont été informé via pronote et l’ENT que le collège met en place pendant la deuxième semaine des cours à distance à raison d’une heure par jour en français  et en maths. L’objectif étant le lycée, quel qu’il soit, en donnant aux élèves les connaissances adéquates pour la rentrée en seconde.

Les séances de ce lundi et mardi se sont bien passées pour ceux qui ont fait l’effort de s’investir.

Corrections des activités :

Les séances suivantes auront lieu jeudi 23 et vendredi 24 avril de 9 heures à 11 heures.

Même si une certaine flexibilité reste possible, je m’occuperai en priorité des 3E de 9 heures à 10 heures et des 3C de 10 heures à 11 heures.

La veille de chaque séance, je posterai sur le blog des exercices sur une ou deux thématiques (Fractions, Puissances, Trigonométrie, Arithmétique, Calcul littéral…) et, à l’heure de la séance je serai disponible par chat, mail et téléphone (Je vous ai communiqué mon numéro via l’ENT).

Exercice 1

Dans le triangle WJD rectangle en W, on sait que :

  • WJ = 2,6 cm
  • WD = 3,8 cm

Après avoir fait un schéma, calcule l’arrondi au degré près de la mesure de l’angle WJD.

Exercice 2

Dans le triangle SDK rectangle en S, on sait que :

  • SD = 2,7 cm
  • SDK = 56°

Après avoir fait un schéma, calcule la longueur du segment [SK]. (Arrondir au dixième)

Exercice 3

Dans le triangle TNL rectangle en T, on sait que :

  • TL = 3 cm
  • NLT = 43°

Après avoir fait un schéma, calcule la longueur du segment [LN]. (Arrondir au dixième)

Exercice 4

Dans le triangle LCV rectangle en L, on sait que :

  • LC = 2,7 cm
  • CV = 7,7 cm

Après avoir fait un schéma, calcule l’arrondi au degré près de la mesure de l’angle LVC.

Exercice 5

Dans le triangle DRT rectangle en D, on sait que :

  • DT = 7,6 cm
  • RTD = 37°

Après avoir fait un schéma, calcule la longueur du segment [DR]. (Arrondir au dixième)

Confinement – Lundi 30 mars 2020 – Mathématiques cycles 3 et 4

Cycle 3 (6ème)

I. Exercice : L’enclos

Un enclos est composé de segments verticaux et horizontaux joignant deux points de la grille et il forme une boucle fermée qui ne se croise pas. L’indice situé dans une case donne le nombre de segments d’enclos entourant cette case.


Exemple :

C’est à vous de jouer avec cet enclos 10 x 10 :

Attention, élèves de Peguy en classe c’est 8 x 8 !

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 1 1 3 1 0
1 0 0 1 1 3 2 2 2 1
3 1 2 3 3 2 2 1 1 2
2 3 2 0 1 1 2 1 0 1
1 1 0 0 0 1 3 1 0 1
1 0 1 0 1 0 1 0 0 1
2 2 3 2 3 1 0 0 0 1
1 1 1 3 2 2 1 1 1 2

Solution demain !

II. Relire la leçon :

Cycle 4 (3ème)

I. Relire

II. Exercices

(A faire sur feuille)

Exercice 1

Dans le triangle HAB rectangle en H, on sait que :

  • HA = 2,4 cm
  • HB = 6,6 cm

Après avoir fait un schéma, calcule l’arrondi au degré près de la mesure de l’angle HAB.

Exercice 2

Dans le triangle SMF rectangle en S, on sait que :

  • SF = 7,4 cm
  • SMF = 71°

Après avoir fait un schéma, calcule la longueur du segment [FM]. (Arrondir au dixième)

Exercice 3

Dans le triangle ZFW rectangle en Z, on sait que :

  • ZW = 7,7 cm
  • ZFW = 61°

Après avoir fait un schéma, calcule la longueur du segment [ZF]. (Arrondir au dixième)

Exercice 4

Dans le triangle HSD rectangle en H, on sait que :

  • SD = 7 cm
  • SDH = 24°

Après avoir fait un schéma, calcule la longueur du segment [HD]. (Arrondir au dixième)

Exercice 5

Dans le triangle CNL rectangle en C, on sait que :

  • CN = 1,9 cm
  • NL = 6,8 cm

Après avoir fait un schéma, calcule l’arrondi au degré près de la mesure de l’angle CLN.

Solution demain !

Confinement – JOUR 5 – Mathématiques cycles 3 et 4

Correction de l’activité

10216168
160 548
84 267
27 193

La première colonne était facile, le 5 était forcément en haut et il restait 2 et 1 à placer…

C’était plus difficile !

Solution 1

15921
20 659
7 214
18 738

Solution 2

15921
20 758
7 214
18 639

Bravo à ceux qui ont trouvé ! Vous pourrez retrouver une autre activité de ce type la semaine prochaine !

Cycle 3 (6ème)

II. Calcul mental (contre la montre)

Dans un cahier, et en moins de 5 minutes trouve tous les nombres manquants :

16 + ….. = 1722 – ….. = 14
….. – 15 = 0….. + 23 = 36
0 + ….. = 44 × 10 = …..
12 + 11 = …..17 + 17 = …..
….. + 24 = 3118 – 13 = …..
1 + ….. = 527 – ….. = 7
35 – ….. = 2418 + 21 = …..
….. – 9 = 24….. – 6 = 8
34 – ….. = 21….. : 6 = 8
….. + 17 = 307 × 3 = …..
La solution sera donnée demain

III. Entre les Mathématiques (Angle) et la Géographie, un exercice en ligne sur la rose des vents (1):

https://ressources.sesamath.net/matoumatheux/www/geom/angles/rose1.htm#6

Cycle 4 (3ème…)

II. Relire

https://site2wouf.fr/trigonometrie.php

III. Exercice à faire par écrit

La solution sera donnée demain