B1 · Episode 12 · 4:12

Python Booleans and Floating-Point Comparisons

This episode covers Python booleans, comparison operators (like != and ==), and explains why direct equality checks with floating-point numbers are unreliable due to binary representation limitations—demonstrating safer alternatives using tolerance-based comparisons.

Source:jmbarbier / peertube.solidev.net · License:CC BY-SA 4.0

Transcript

  1. Voilà, mais pour que ce soit plus rapide, le Python a.

    Here we go, but to make it faster, Python has...

  2. Une manière d'écrire 3

    A way to write "3"

  3. point d'exclamation égal 2, c'est

    followed by an exclamation mark and an equals sign: "!="

  4. pour dire est différent de.

    means "not equal to."

  5. Est- ce que 3 est différent de 2, la réponse doit être vrai.

    So, is "3 not equal to 2?" — the answer should be "True."

  6. Donc là, on a en fait tout ça qui vont permettre de faire des comparaisons à

    So here, we actually have all these operators

  7. l'intérieur de nos différentes. . .

    that let us perform comparisons inside our various data types.

  8. Est- ce que des nombres sont égaux, est- ce que des nombres sont

    For example: Are two numbers equal?

  9. plus grands, plus petits.

    Are they greater or smaller than each other?

  10. Et le truc que vous allez oublier, c'est l'égalité, c'est un double égal.

    And what you’ll most likely forget is the equality operator—it requires a double equals sign.

  11. Alors juste petite précision,

    Just a quick clarification:

  12. qu'est- ce qui se passe par exemple quand on compare un nombre entier avec un

    What happens, for instance, when we compare an integer with

  13. nombre. Décimal.

    a decimal number?

  14. Est- ce que 2 est égal à 2 avec une virgule?

    Is "2" equal to "2.0"?

  15. Et la réponse est oui.

    The answer is yes.

  16. Le Python va essayer de comparer les valeurs en les rapprochant,

    Python tries to compare values by aligning them—

  17. les mettant au même type.

    that is, converting them to the same type.

  18. Ce qui peut de temps en temps poser problème, puisque voilà,

    This can sometimes cause problems, since—

  19. si vous faites une comparaison avec un nombre entier,

    an integer is exact,

  20. un nombre entier il est exact,

    but a floating-point number

  21. un nombre à virgule il est potentiellement pas exactement le même.

    may not be exactly the same.

  22. Et je vous rappelle l'exemple qu'on a vu dans le cours, print,

    Recall the example from class: the print function—

  23. est- ce que 0, 3 est égal à 0, 1 plus 0, 2?

    Is "0.3" equal to "0.1 + 0.2"?

  24. Et la réponse, elle est fausse,

    The result is "False",

  25. d'accord? Pourquoi?

    right? Why?

  26. Si je vous rappelle ici, si j'affiche 03 d'un côté.

    If I remind you here, displaying 0.3 on one side.

  27. Et 0, 1 plus 0, 2 de l'autre côté,

    and 0.1 plus 0.2 on the other side,

  28. on a ici. Le fait que 0, 3 il est là, et en fait le 0, 1 plus 0,

    we find that 0.3 is indeed there, and in fact, 0.1 plus 0.2,

  29. 2, à cause du fait que c'est des nombres qui ont été convertis en binaire avec des

    because these numbers are converted to binary with decimal points,

  30. virgules, etc. , eh bien on a quelque chose qui n'est pas un calcul exact.

    this leads to an inexact calculation.

  31. c'est bien quand on convertit un nombre en binaire on peut avoir des suites de

    When converting a number to binary,

  32. nombres qui ne s'arrêtent jamais une conversion qui s'arrête jamais et qu'on est

    you may get an endless sequence of digits,

  33. bien obligé d'arrêter à un moment et ça ça entraîne des erreurs de calcul donc

    meaning the conversion never terminates, so we must stop it at some point—

  34. l'exemple typique zéro un plus zéro deux n'est pas égal à zéro trois

    and this introduces calculation errors. So the classic example is: 0.1 plus 0.2 does not equal 0.3.

  35. alors que je vous rassure print

    But rest assured,

  36. Trois est égal à un plus deux.

    print(3) equals print(1+2).

  37. ça fonctionne, ok?

    That works—okay?

  38. Donc voilà, donc petit rappel ici sur le fait que les nombres.

    So here’s a quick recap about floating-point numbers:

  39. Faire une égalité avec des nombres à virgule, c'est quelque chose de dangereux.

    using equality comparisons with decimal numbers is risky.

  40. Pour ça qu'en fait elles sont même pour être à fond

    That’s why this practice is,

  41. très fortement.

    strongly discouraged.

  42. Déconseillé. Donc on va utiliser des supérieurs, des inférieurs,

    So we’ll use greater-than or less-than comparisons instead—

  43. ça n'a pas de problème, mais une égalité avec des nombres flottants,

    those are fine, but equality checks with floating-point numbers—

  44. l'idée c'est niet, jamais.

    that idea? No—never.

  45. Donc si vraiment on veut tester si deux nombres flottants sont proches les uns des

    Therefore, if you really need to test whether two floating-point numbers are close to each other,

  46. autres, par exemple ici, est- ce que 0, 1 et plus 0, 2 vaut 0,

    for example, whether 0.1 plus 0.2 equals 0.3,

  47. 3, eh bien on va l'écrire mieux.

    we should write it more robustly.

  48. On va écrire par exemple print

    For instance, we can write: print(

  49. 0, 3 moins 0, 1 plus 0, 2 et on va regarder si ce truc- là est inférieur à une

    0.3 minus (0.1 plus 0.2)), then check whether this difference is smaller than a certain value,

  50. certaine valeur, par exemple 0, 0001.

    such as 0.0001.

  51. Et là, ça sera bon.

    Then it’ll be done.

  52. D'accord? Donc, comme on n'a pas des calculs qui sont forcément exacts,

    Okay? Since our calculations aren’t necessarily exact,

  53. on va aller plutôt que faire une égalité avec des nombres flottants,

    instead of checking equality directly with floating-point numbers,

  54. on va aller soustraire par exemple les deux résultats qu'on a,

    we’ll subtract, for example, the two results we obtained,

  55. on va vérifier si l'écart qu'il y a entre les deux est inférieur à une certaine

    then check whether the gap between them is smaller than a certain threshold we set,

  56. limite qu'on peut se fixer.

    a limit we define ourselves.

  57. Voilà pour les boulets.

    That’s it for the ‘floating-point pitfalls’.

  58. Et voilà normalement le plus loin qu'on est allé en classe avec au moins le groupe

    And this part—normally the farthest we’ve gone in class, at least with Group 1,

  59. 1. Et je crois que le groupe 2 on n'était pas allé jusque là.

    while I think Group 2 hadn’t reached this point yet.

  60. Donc voilà, donc révision pour certains, vision pour d'autres,

    So for some, it’s revision; for others, it’s new material.

  61. prenez le temps de compléter éventuellement votre cours, de le réécrire,

    Please take time to complete—or even rewrite—your notes,

  62. et on va passer à la suite.

    and then we’ll move on to the next topic.