[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Pour tester l'égalité numérique des nombres, vous devriez normalement
employer =
, pas eq
. Il peut y avoir beaucoup d'objets
distincts de nombre à virgule flottante avec la même valeur
numérique. Si vous employez eq
pour les comparer, vous testez
si deux valeurs sont des objets identiques. En revanche,
=
compare seulement les valeurs numériques des objets.
Actuellement, chaque valeur de nombre entier a un objet unique de Lisp
dans Emacs Lisp. Par conséquent, eq
est équivalent au =
quand des nombres entiers sont concernés. Il est parfois commode
d'employer eq
pour comparer une valeur inconnue à un nombre
entier, parce que eq
ne rapporte pas d'erreur si la valeur
inconnue n'est pas un nombre—il accepte des arguments de n'importe
quel type—. En revanche, =
signale une erreur si les
arguments ne sont pas des nombres ou des marqueurs. Cependant, c'est
une bonne idée d'employer =
si vous le pouvez, même pour
comparer des nombres entiers, juste au cas où nous changerions la
représentation des nombres entiers dans une future version d'Emacs.
Parfois il est utile de comparer des nombres avec equal
; les
deux nombres sont traités comme égaux s'ils ont le même type de
données (les deux sont des nombres entiers, ou à virgule flottante) et
la même valeur. En revanche, =
peut traiter un nombre entier et
un nombre à virgule flottante en tant qu'égaux. Voir la section Equality Predicates.
Il y a un autre problème: parce que l'arithmétique de virgule flottante n'est pas exacte, c'est souvent une mauvaise idée de vérifier l'égalité de deux valeurs à virgule flottante. Habituellement il vaut mieux déterminer l'égalité approximative. Voici une fonction pour faire ceci:
(defvar fuzz-factor 1.0e-6) (defun approx-equal (x y) (or (and (= x 0) (= y 0)) (< (/ (abs (- x y)) (max (abs x) (abs y))) fuzz-factor))) |
Common Lisp note: Comparer des nombres en Common Lisp exige toujours
=
parce que le Common Lisp met en application des nombres entiers pluritermes, et deux objets distincts de nombre entier peuvent avoir la même valeur numérique. L'Emacs Lisp peut avoir juste un objet de nombre entier pour n'importe quelle valeur donnée parce qu'il a un champ limité des valeurs de nombre entier.
Cette fonction teste si ses arguments sont numériquement égaux, et
renvoie le t
si oui, nil
autrement.
Cette fonction agit comme eq
sauf quand les deux arguments sont
des nombres. Elle compare des nombres par le type et la valeur
numérique, de sorte que (eql 1.0 1)
renvoie le nil
, mais
(eql 1.0 1.0)
et (eql 1 1)
renvoient tous les deux le
t
.
Cette fonction teste si ses arguments sont numériquement égaux, et
renvoie t
s'ils ne sont pas égaux, et nil
s'ils sont
égaux.
Cette fonction teste si son premier argument est strictement moins
grand que son deuxième argument. Elle renvoie t
si oui,
nil
autrement.
Cette fonction teste si son premier argument est inférieur ou égal à
son deuxième argument. Elle renvoie t
si oui, nil
autrement.
Cette fonction teste si son premier argument est strictement plus
grand que son deuxième argument. Elle renvoie t
si oui,
nil
autrement.
Cette fonction teste si son premier argument est supérieur ou égal à
son deuxième argument. Il renvoie t
si oui, nil
autrement.
Cette fonction renvoie le plus grand de ses arguments. Si l'un des arguments est à virgule flottante, la valeur est retournée à virgule flottante, même si elle était donnée comme nombre entier.
(max 20) ⇒ 20 (max 1 2.5) ⇒ 2.5 (max 1 3 2.5) ⇒ 3.0 |
Cette fonction renvoie le plus petit de ses arguments. Si l'un des arguments est à virgule flottante, la valeur est retournée à virgule flottante, même si elle était donnée comme nombre entier.
(min -4 1) ⇒ -4 |
Cette fonction renvoie la valeur absolue de number.
[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.