EQUAL

EQUAL

Cette fonction détermine si deux expressions sont égales avec la possibilité de donner une précision de comparaison entre les deux expressions.
En effet, deux nombres issus de calculs différents peuvent être insensiblement différents, le mode précision permet de compenser ces imprécisions de calcul et déclarer deux valeurs égales, il est donc possible de mettre un tampon (précision) de valeur très faible sans vraiment nuire à la précision finale, par exemple comparer si deux valeurs sont égales à la neuvième décimale près (0.000000001).

Syntaxes : (equal expr1 expr2 précision)
Arguments expr1                   la première des deux expressions à comparer

expr2                   la seconde des deux expressions à comparer

précision             un nombre réel qui indique avec quelle précision doivent être comparées les deux expressions

Valeur renvoyée T si les expressions sont égales (à la précision près)

Nil si les expressions sont différentes (malgré le tampon de précision)

Exemples

 equal_01 T
 equal_02 nil
 equal_03 T

Dans le deuxième exemple nil est renvoyé car il n'y a pas de tampon de précision indiqué, c'est donc bien une comparaison "brute" et il y a une différence sur la dernière décimale.
Dans le dernier exemple, les nombres sont égaux à la cinquième décimale donc (equal) renvoie T.

parenthèses_01

Ailleurs sur le site je vous ai parlé de la "fameuse" imprécision de calcul des ordinateurs en général, plus exactement des processeurs ont du mal à gérer certains nombres et font des erreurs de calcul, et cette "erreur" est d'importance avec la fonction EQUAL dans les programmes, le tampon de précision de comparaison va être très utile pour pallier les dysfonctionnements des processeurs.
L'erreur de calcul se produit dans les dernières décimales de certaines opérations, par exemple si vous retrancher 65432 à 65432.28 le résultat se trouve de tête et c'est 0.28 on est tous d'accord.
Si un tel calcul se présente dans vos programmes et que vous mettiez une condition (if)avec un test du style : si le résultat est 0.28 faire-ceci, sinon faire autre chose, je vous promets des doutes sur votre santé mentale, car le processeur ne trouve pas 0.28 comme résultat à ce calcul et de ce fait, votre condition si le résultat est 0.28 faire-ceci, sinon faire-cela, et bien ce sera faire-cela qui se mettra en route, sauf si vous utilisez (equal)avec un tampon de précision.
Je vous rassure tout de même en vous disant que dans ce cas l'erreur se produit sur la onzième décimale, erreur négligeable mais erreur tout de même.

 equal_04 Définition des variables
 equal_05 Si ab est égal à 0.28
afficher une boîte (alert) avec le message :
"condition respectée" le 1 sur l'image
sinon afficher une boîte (alert) avec le message :
"condition NON respectée" le 2 sur l'image

Lancer ce mini-programme et vous constatez que c'est le deuxième cas qui est pris en compte alors que ab est bel et bien égal à 0.28.

La même chose maintenant avec la fonction (equal) et un tampon de précision :

 equal_06 Définition des variables
 equal_07 Si ab est égal à 0.28
à la huitième décimale près
afficher une boîte (alert)
"condition respectée" le 1 sur l'image
sinon afficher une boîte (alert)
"condition NON respectée" le 2 sur l'image

Fonctionne aussi avec des arguments de type SYM

(= (type "toto") 'STR)

Renvoie T car "toto" est bien du type STR (string)


Haut de page

revenir au menu COMPARAISON


5 juin 2017, mise à jour le 15 décembre 2017