evalformula calcule une expression quelconque sur des arrays of real.
set a to createarray 10000 range {0, 2*pi}
set s2 to evalformula "2*cos(x)*sin(x)" with {x:a}
evalformula peut mélanger en arguments des arrays of real et des nombres.
evalformula "poly*factor" with {poly:thePolygon, factor:10.0}
-
L'expression à calculer peut contenir des opérateurs logiques, même si toutes les valeurs sont converties en nombres réels : les expressions valant true seront évaluées à 1.0, celles valant false seront évaluées à 0.0. Inversement, tout nombre non nul évalué dans une expression logique sera considérée comme true (1.0).
-
Le paramètre direct de la commande evalformula peut être une succession d'expressions séparées par des point-virgule ;. Vous pouvez aussi utiliser return comme séparateur, de façon à pouvoir utiliser le contenu d'une fenêtre de texte en tant qu'expression dans les cas complexes nécessitant plusieurs étapes intermédiaires. Lorsque vous utilisez une telle construction, evalformula ne retournera que le résultat de l'évaluation de la dernière expression (la plus à droite). Ainsi l'exemple ci-dessous renvoie 2.0.
evalformula "a=1;a+1"
evalformula "a=1
a+1"
- Au lieu de passer une expression, vous pouvez passer une liste d'expressions : evalformula renverra une liste d'arrays of real.
-
Voici la liste des opérateurs et des fonctions utilisables dans les expression d'evalformula :
-
opérateurs (par ordre de priorité décroissant)
- - (unaire)
- * /, + -, ^ (exponentielle)
- >= > <= <== != (égal - différent), & (ET logique), | (OU logique), ! (NON booléen, évalué à 1 si l'opérande vaut 0, et évalué à 0 sinon).
-
algèbre
- sqr, sqrt, hypot, pow
- abs, ceil, floor, trunc, max, min
- mod (modulo), remainder
- isnan (teste si la quantité est un ``NAN''. NAN = Not A Number, nombre invalide.)
-
fonctions transcendentales
- ln ou log (népérien), log10, exp
- cos, sin, tan, acos, asin, atan, atan2
- cosh, sinh, tanh, acosh, asinh, atanh
- erf, erfc, gamma, lgamma
-
fonctions opérant sur des vecteurs
- norm et norm2, respectivement la norme euclidienne et la norme euclidienne au carré (un nombre),
- sum et runsum, respectivement la somme (un nombre) et les sommes partielles (un vecteur de même taille),
- count, le nombre d'éléments (un nombre).
evalformula ("atan2(y,x)") with {y:sqrt (3), x:1}
-- 1.047197551197 (c'est-à-dire pi/3)
evalformula ("norm(cos(x))/sqrt(count(x))") with {x:randomarray 10000 range {0, 2 * pi}}
-- 0.701118610115 (c'est-à-dire ~1/sqrt(2))
|