Evaluation des expressions
Précédent | La partition numérique standard | Suivant

## Evaluation des expressions

Dans les anciennes versions de Csound les nombres présents dans une partition étaient utilisés tels quels. Dans certains cas, une évaluation simple serait plus facile. Ce besoin est accru s'il y a des macros. Pour y arriver, on a introduit la syntaxe des expressions arithmétiques entre crochets [ ]. On peut utiliser des expressions avec les opérations +, -, *, /, % ("modulo"), et ^ ("élévation à une puissance"), les groupements se faisant par parenthèses ( ). Les signes unaires plus et moins sont aussi supportés. Les expressions peuvent inclure des nombres et, naturellement, des macros dont la valeur est une chaîne numérique ou arithmétique. Tous les calculs sont faits en nombres en virgule flottante. Les règles de précédence usuelles sont suivies lors de l'évaluation : les expressions entre parenthèse () sont évaluées en premier et ^ est évalué avant *, /, et % qui sont évalués avant + et -.

En plus des opérations arithmétiques, les opérateurs logiques bit à bit suivants sont aussi disponibles : & (ET), | (OU), et # (OU exclusif). Ces opérateurs arrondissent leurs opérandes à l'entier (long) le plus proche avant l'évaluation. Les opérateurs logiques ont la même précédence que les opérateurs arithmétiques *, /, et %.

Finalement, on peut utiliser le symbole tilde ˜ dans une expression chaque fois qu'un nombre est permis. Chaque ˜ sera remplacé par un nombre aléatoire compris entre zéro (0) et un (1).

### Exemple

    r3  CNT

    i1  0  [0.3*$CNT.]
    i1  +  [($CNT./3)+0.2]

    e

Comme les trois copies de la section comprennent la macro $CNT. avec les valeurs successives 1, 2 et 3, le développement est

    s
    i1  0  0.3
    i1  0.3  0.533333
    s
    i1  0  0.6
    i1  0.6  0.866667
    s
    i1  0  0.9
    i1  0.9  1.2
    e

C'est une forme extrême, mais on peut aussi utiliser le système d'évaluation pour répéter des sections avec des différences subtiles.

Voici quelques exemples simples de chaque opérateur :

    i1  0   1   [ 110 + 220 ]      ; evaluates to 330
    i1  +   .   [ 330 - 55 ]       ; 275
    i1  +   .   [ 44 * 10 ]        ; 440
    i1  +   .   [ 1100 / 2 ]       ; 550
    i1  +   .   [ 5 ^ 4 ]          ; 625
    i1  +   .   [ 5660 % 1000 ]    ; 660
    i1  +   .   [ 110 & 220 ]      ; 76
    i1  +   .   [ 110 | 220 ]      ; 254
    i1  +   .   [ 110 # 220 ]      ; 178
    i1  +   .   [~]                ; random between 0-1
    i1  +   .   [~ * 4 + 1]        ; random between 1-5
    i1  +   .   [~ * 95 + 5]       ; random between 5-100

    i1  +   .   [ 8 / 2 * 3 ]      ; 12
    i1  +   .   [ 4 + 3 - 2 + 1 ]  ; 6
    i1  +   .   [ 4 + 3 * 2 + 1 ]  ; 11
    i1  +   .   [(4 + 3)*(2 + 1)]  ; 21

    i1  +   .   [ 2 * 2 & 3 ]      ; 4
    i1  +   .   [ 3 & 2 * 2 ]      ; 0
    i1  +   .   [ 4 | 3 * 3 ]      ; 13

### L'opérateur @

On a ajouté dans la version 3.56 de Csound @x (la première puissance de deux supérieure ou égale à x) et @@x (la première puissance de deux plus un supérieure ou égale à x).

    [ @ 11 ] will evaluate to 16
    [ @@ 11 ] to 17

### Crédits

Auteur : John ffitch

University of Bath/Codemist Ltd.

Bath, UK

Avril 1998 (Nouveau dans la version 3.48 de Csound)

Précédent | Niveau supérieur | Suivant
Partition dans plusieurs fichiers | Sommaire | Chaînes de caractères dans les p-champs