@EVAL[expression[=displayformat]]: Évalue une expression mathématique et renvoie sa valeur dans le format spécifié par displayformat ou dans le format par défaut. L'interprétation des paramètres ci-dessous décrit ce que l'expression peut contenir. Laprécision d'affichage et le format de sortie ci-dessous expliquent le format du résultat.

 

L'expression peut contenir des variables d'environnement et d'autres fonctions variables, et peut utiliser n'importe lequel des opérateurs énumérés ci-dessous. @EVAL prend également en charge les parenthèses (pour contrôler l'ordre d'évaluation), les virgules, les séparateurs hexadécimaux et décimaux. Les parenthèses peuvent être imbriquées. @EVAL supprime les zéros initiaux et finaux du résultat, à moins que vous n'utilisiez les opérateurs de formatage de sortie.

 

@EVAL prend en charge les très grands nombres. La taille maximale est de 2 147 483 647 chiffres sous Windows x64. (Windows x86 sera limité par la mémoire à beaucoup moins). Si vous souhaitez utiliser plus que les valeurs décimales par défaut, vous devrez modifier les  options de configuration de @Eval Precision ou utiliser le format "=x.y" dans @EVAL . Les opérateurs sur les entiers (AND, OR et XOR) sont limités aux entiers de 64 bits.

 

Onestep        Interprétation des paramètres

Onestep        Opérateurs arithmétiques

Onestep        Fonctions trigonométriques et transcendantes

Onestep        Autres fonctions

Onestep        Ordre de préséance

Onestep        Précision des calculs internes

Onestep        Précision de l'affichage et format de sortie

Onestep        Exemples d'application

 

Interprétation des paramètres

 

L'expression peut contenir des variables d'environnement et des variables internes, des variables de tableau et des fonctions variables. Une fois que toutes les variables et fonctions ont été développées, elle doit être composée uniquement de chaînes numériques et de noms de fonctions dans Fonctions trigonométriques et transcendantes ou Autres fonctions, reliées par des opérateurs arithmétiques et éventuellement regroupées par des parenthèses.

 

@EVAL permet de simplifier les expressions en supprimant le % devant les noms des variables d'environnement. Cela empêche également l'analyseur TCC d'étendre (éventuellement de manière erronée) les variables avant de les transmettre à @EVAL. Vous devez inclure % pour les variables internes et les fonctions de variables .@EVAL vous permet également d'utiliser des caractères qui ont normalement une signification spéciale pour les variables internes. TCC par exemple, & < > ^ | sans désactiver leur signification spéciale ou les mettre entre guillemets.

 

Remarque : pour garantir une  interprétation correcte des expressions,  il convient de placer desespaces de part et d'autre de chaque opérateur et d'utiliser librement les parenthèses. Par exemple :

 

%@eval[(20 %% 3) + 4]

%@eval[12 and 65]

 

@EVAL accepte les nombres dans la syntaxe des exposants de la notation scientifique, c'est-à-dire 1575e-2 = 15,75. Vous pouvez spécifier la sortie en notation scientifique avec la syntaxe @eval[...=E]. Par exemple :

 

echo %@eval[1.4567e+4*7.6541e+2=E]

 

Vous pouvez combiner =E avec une précision d'affichage (voir ci-dessous) :

 

echo %@eval[1.4567e+4*7.6541e+2=E1.20]

 

Base des nombres

 

Si une chaîne commence par les caractères 0x, elle est interprétée comme un nombre entier en notation hexadécimale . Si une chaîne commence par les caractères 0b, elle est interprétée comme un nombre entier en notation binaire . Si une chaîne commence par les caractères 0o, elle est interprétée comme un nombre entier en notation octale. Toute autre chaîne numérique est considérée comme un nombre décimal.

 

Par exemple, vous pouvez spécifier une sortie hexadécimale :

 

[c:\] echo %@eval[0x10 + 16]

32

 

Vous pouvez spécifier la sortie hexadécimale avec la syntaxe spéciale @eval[...=H]. Par exemple, @eval[...=H]

 

echo %@eval[3*6=H]

 

produira 12 (hexadécimal). Aucun 0x de tête n'est inclus dans la sortie. Pour convertir les formats décimal et hexadécimal, voir la fonction @CONVERT de .

 

Vous pouvez spécifier la sortie binaire avec la syntaxe spéciale @eval[...=B]. Par exemple :

 

echo %@eval[3*6=B]

 

La sortie hexadécimale et binaire est limitée aux entiers de 64 bits (signés).

 

Opérateurs arithmétiques

 

Tous les opérateurs acceptent des paramètres entiers et non entiers, sauf dans les cas suivants.

 

Opérateurs acceptant des paramètres fractionnaires

 

+(avec un paramètre) signe du paramètre numérique (par exemple +3)
+(avec deux paramètres) addition
-(avec un paramètre) négation d'un paramètre symbolique (par exemple, -n) ou signe d'un paramètre numérique (par exemple, -1, +3)
-(avec deux paramètres) soustraction
*multiplication
/division
**exponentiation
!booléen non

 

Opérateurs nécessitant des paramètres entiers

 

\division entière (renvoie la partie entière du quotient)
MODmodulo (renvoie le reste lorsque le premier paramètre est divisé par le second)
%%identique à MOD
SHLdécalage arithmétique vers la gauche du premier paramètre, tronqué vers zéro pour obtenir un entier, du nombre de bits spécifié par le second paramètre
<<idem SHL
SHRdécalage arithmétique vers la droite du premier paramètre, tronqué vers zéro en un entier, du nombre de bits spécifié par le second paramètre
>>id emSHR
>supérieur à
<inférieur à
>=supérieur ou égal à
<=inférieur ou égal à
!=différent de

 

Opérateurs qui tronquent les paramètres en entiers

 

ANDbitwise and (renvoie 1 pour chaque position de bit où les bits correspondants dans les deux paramètres sont à 1)
&identique à AND
ORbitwise or (renvoie 1 pour chaque position de bit où le bit correspondant dans au moins un paramètre est 1)
|identique àOR
XORbitwise exclusive or (renvoie 1 pour chaque position de bit où les bits correspondants des deux paramètres sont différents)
^identique àXOR
~unaire NOT

 

Fonctions trigonométriques et transcendantes

 

L'expression peut inclure les fonctions trigonométriques et transcendantes ci-dessous. L'argument est interprété en radians.

 

log(x)logarithme naturel
log2(x)logarithme binaire
log10(x)log 10
exp(x)exponentielle
sin(x) sinus
asin(x)arcsine
sinh(x)sinus hyperbolique
cos(x)cosinus        
acos(x)arccosine        
cosh(x)cosinus hyperbolique        
tan(x)tangente        
atan(x)arctangente        
tanh(x)tangente hyperbolique

 

La chaîne spéciale PI est un raccourci pour la valeur 3.14159265358979323846.

 

Autres fonctions

 

abs(x)        valeur absolue

ceil(x)        plafond

fact(x)        factorielle

floor(x)        floor

gcd(x y)        plus grand diviseur commun (entier de 64 bits maximum)

lcm(x y)        plus petit commun multiple (entier de 64 bits maximum)

ror(x y z)        rotation x à droite y bits avec une taille variable de z (en bits) (nombre entier de 64 bits au maximum)

rol(x y z)         rotationx gauche y bits avec une taille variable dez ( en bits)(entier de 64 bits au maximum)

 

Ordre de préséance

 

1.variables
2.expressions entre parenthèses correspondantes
3.fonctions listées dans Fonctions trigonométriques et transcendantes
4.exponentiation
5.multiplication, division et MOD
6.addition et soustraction
7.>, <, AND, OR, XOR, NOT, SHL et SHR

 

Lorsque plusieurs expressions consécutives d'un même niveau de priorité sont utilisées, l'évaluation se fait de gauche à droite.

 

Par exemple,3 + 4 * 2 sera interprété comme 3 + 8, et non comme 7 * 2. Pour modifier cet ordre d'évaluation, utilisez des parenthèses pour spécifier l'ordre souhaité.

 

Précision des calculs internes

 

@EVAL prend en charge des nombres jusqu'à 30 000 chiffres ; il est très peu probable que vous ayez besoin d'une plus grande précision ! Quelques fonctions (gcd, lcm, ror, rol) utilisent des entiers de 64 bits.

 

Précision d'affichage et format de sortie

 

La précision d'affichage maximale est de 15 000 chiffres à gauche de la virgule et de 15 000 chiffres à droite. Vous pouvez modifier la précision décimale par défaut avec la commande OPTION, les  options de configuration @EVAL Precision et la commande SETDOS /F . Vous pouvez modifier le séparateur décimal avec l' option de configuration du caractère décimal ou la  commande SETDOS /G.

 

Vous pouvez modifier le format d'affichage de l'instance courante de @EVAL en spécifiant displayformat.

 

Format d'affichage de la notation scientifique

 

Si displayformat est E, la sortie se fera en notation scientifique. Par exemple, vous pouvez combiner =E avec un format d'affichage E :

 

echo %@eval[1.4567e+4*7.6541e+2=E]

 

Vous pouvez combiner =E avec une précision d'affichage (voir ci-dessous) :

 

echo %@eval[1.4567e+4*7.6541e+2=E1.15]

 

Format d'affichage hexadécimal

 

Si le format d'affichage est la lettre H, la sortie sera hexadécimale. Si le format d'affichageest X, lasortie sera hexadécimale avec un 0xen tête .

 

Format d'affichage binaire

 

Si le format d'affichage est la lettre B, la sortie sera binaire.

 

Format d'affichage octal

 

Si le format d'affichage est la lettre O, la sortie sera octale.

 

Précision explicite

 

Si le format d'affichage est i.a, alors :

 

•i doit être un nombre qui spécifie la précision décimale minimale (le nombre minimal de décimales affichées) ;

•a doit être un nombre qui définit la précision décimale maximale.

•le caractère séparant i et a peut être la virgule s'il s'agit de votre séparateur décimal.

 

Vous pouvez spécifier l'un ou l'autre des paramètres i et a, ou les deux . Si i >a, ou si seul i est spécifié, i est utilisé à la fois comme précision minimale et maximale, par exemple=2 et =2.1 sont équivalents à=2.2.

 

Si le dernier caractère du format d'affichage est +, @EVAL fait précéder les nombres positifs d'un+.

 

Exemples :

 

Expression

Value

@eval[3 / 6=2.4]

0.50

@eval[3 / 6=4.4]

0.5000

@eval[3 / 7]

0.4285714286

@eval[3 / 7=.4]

0.4286

@eval[3 / 7=2.2]

0.42

@eval[3 / 7=2]

0.42

@eval[3 / 7=2+]

+0.42

 

Voir aussi : @DEC et @INC.