Scenario condition "superieur ou égal"

Bonjour
Rencontrant un problème de condition dans un scenario gérant le chauffage je me suis rendu compte que la condition « >= » ne fonctionnait pas lorsqu’il y a égalité.
Démonstration j’ai créé un scenario pour vérifier les 2 conditions « <= » et « <= »
Pour la condition 18.4 <= (18.1+0.3) j’obtiens que c’est vrai
Pour la condition 18.4 >= (18.1+0.3) j’obtiens que c’est faux


Est ce normal ? aurais je raté quelque chose ?
Je soumets à vos réactions
Bien cordialement

Le truc c’est que là c’est des opération sur des nombres à virgule flottante… vu l’algo utilisé en informatique pour stocker ce genre de nombre, il y a toujours une imprécision.
Il y a une vidéo qui explique ça plutôt bien, faudrait que je la retrouve.
EDIT : trouvé

a partir de la 11eme minute (mais la totalité de la vidéo est intéressante)

Bonjour,

18.4 >= round(18.1+0.3,2)

Merci.
Faut il également utiliser cette subtilité pour la condition « <= » ?

Bonjour

C’est quand même étrange ce comportement. Car en faisant le test dans le testeur d’expression, on obtient les mêmes résultats, alors que les valeurs 18.1 et 0.3 sont saisies manuellement et n’ont pas lieu d’avoir des valeurs au-delà des décimales affichées.

Certes l’utilisation de round "corrige" le problème, mais cela ne parait pas logique de devoir l’utiliser, à fortiori si on doit le mettre pour chaque évaluation que l’on pourrait faire dans un scénario qui contient des décimales.

J’ai fait le même test sous Excel, et les deux cas retournent VRAI

image

C’est donc propre à Jeedom ?

Non, c’est propre à l’informatique.

On ne peut jamais comparer des nombres à virgules flottantes, erreur de débutant en programmation.
Il faut tester si la différence entre les deux, en valeur absolue, est plus petite qu’epsilon.

Erreur, çà s’applique à TOUS les nombres à virgule, même si tu le saisis manuellement il est stocké avec une approximation par l’ordinateur !
Ca n’est absolument pas propre à Jeedom c’est général à toute l’informatique.

1 « J'aime »

J’ai oublié de dire comment fait Excel pour minimiser le problème (seulement le minimiser, il existe encore mais dans moins de cas) : Excel fait le calcul avec plus de décimales que ce qu’il affiche et avant d’afficher il arrondit au nombre de décimales « utiles » qui seront affichées.

Merci pour vos explications, mais pour l’utilisateur lambda que je suis, il est déconcertant qu’un simple test logique comme 18.4 >= 18.1 + 0.3 retourne faux
Après si c’est la faute à epsilon, on n’y peut pas grand chose :wink:

2 « J'aime »

On va forcer epsilon à se montrer
Ouvrez une feuille Excel et dans une case tapez

=(43,1-43,2)+1

Vous devez voir le résultat 0,9 et penser que tout va bien. Cliquez sur Format de cellule et choisissez Scientifique avec 15 décimales Et voyez le résultat.
Le problème est que Excel calcule d’abord 43,1 - 43,2 et le résultat -0,1 ne peut pas être stocké exactement, on a epsilon en plus et donc quand on ajoute 1 on n’a pas 0,9 mais 0,89999999999…
Exemple tiré de la page

2 « J'aime »