Types de données en Scilab

01 Feb 2020 01 Feb 2020 3792 vues ESSADDOUKI Mostafa 8 min de lecture

Types de données en Scilab

Scilab supporte plusieurs types de données fondamentaux : booléens, nombres complexes, entiers (plusieurs précisions), flottants double précision et chaînes de caractères. Comprendre ces types est essentiel pour éviter les erreurs de conversion et choisir la bonne représentation selon le contexte.

TypeExemple de créationUsage typique
Booléen%t, %fTests logiques, masques
Complexe1 + 2*%iSignal, algèbre complexe
Entierint8(3), uint32(255)Traitement d'image, données binaires
Flottant (défaut)3.14, 2e-5Calcul numérique général
Chaîne"bonjour"Affichage, étiquettes

1. Booléens

Définition — Booléen Scilab Un booléen représente une valeur de vérité : vrai ou faux. Scilab utilise les constantes prédéfinies %t (ou %T) pour true et %f (ou %F) pour false. Les booléens résultent naturellement des opérateurs de comparaison et sont utilisés dans les conditions et les masques.

Syntaxe — Booléens Scilab
b = %t          // true  (ou %T)
b = %f          // false (ou %F)

// Opérateurs logiques booléens
%t & %f         // ET  → %f
%t | %f         // OU  → %t
~%t             // NON → %f

Exemple n°1 — Booléens et opérations logiques

etat = %t
disp(etat)             // T

etat = %f
disp(etat)             // F

// Comparaisons → booléens
disp(3 > 2)            // T
disp(3 == 2)           // F

// Booléen comme masque sur un vecteur
v = [1 5 3 8 2]
masque = (v > 3)       // [F T F T F]
disp(masque)
disp(v(masque))        // éléments > 3 : [5. 8.]
Sortie
T
F
T
F
masque = F T F T F
v(masque) = 5.  8.
OpérateurDescriptionExempleRésultat
&ET logique%t & %fF
|OU logique%t | %fT
~NON logique~%tF
==Égalité3 == 3T
~=Inégalité3 ~= 2T
Astuce — Booléens dans les calculs arithmétiques En contexte arithmétique, %t vaut 1 et %f vaut 0. Cela permet de compter des occurrences sans boucle :
v = [4 1 7 2 9 3]
nb_sup_5 = sum(v > 5)    // compte les éléments > 5 → 2
disp(nb_sup_5)

2. Nombres complexes

Définition — Nombre complexe Un nombre complexe z = a + b·i est stocké comme une paire de flottants double précision (partie réelle a, partie imaginaire b). La constante prédéfinie %i représente l'unité imaginaire i telle que i² = −1.

Syntaxe — Nombres complexes Scilab
z = a + b * %i      // création d'un complexe

real(z)             // partie réelle
imag(z)             // partie imaginaire
abs(z)              // module |z| = sqrt(a²+b²)
conj(z)             // conjugué ā - b·i
isreal(z)           // %f si z a une partie imaginaire non nulle
FonctionDescriptionExempleRésultat
real(z)Partie réellereal(3 + 4*%i)3.
imag(z)Partie imaginaireimag(3 + 4*%i)4.
abs(z)Moduleabs(3 + 4*%i)5.
conj(z)Conjuguéconj(3 + 4*%i)3 - 4i
isreal(z)Test si réel purisreal(3 + 4*%i)F

Exemple n°2 — Opérations sur les complexes

x = 1 + %i
y = 1 - %i

disp("x         = " + string(x))
disp("isreal(x) = " + string(isreal(x)))  // F

disp("real(y)   = " + string(real(y)))    // 1
disp("imag(y)   = " + string(imag(y)))    // -1
disp("abs(x)    = " + string(abs(x)))     // √2 ≈ 1.4142
disp("x * y     = " + string(x * y))      // (1+i)(1-i) = 1+1 = 2

// Vérification : i² = -1
disp("%i^2 = " + string(%i^2))            // -1
Sortie
x         = 1 + i
isreal(x) = F
real(y)   = 1.
imag(y)   = -1.
abs(x)    = 1.4142136
x * y     = 2.
%i^2      = -1.

3. Entiers

Définition — Types entiers Scilab Scilab fournit 6 types entiers couvrant des précisions de 8 à 32 bits, en versions signée (plage [−2^(n−1), 2^(n−1)−1]) et non signée (plage [0, 2^n − 1]).
TypeBitsSignéPlage de valeursCréation
int88✅ Oui[−128, 127]int8(3)
uint88❌ Non[0, 255]uint8(200)
int1616✅ Oui[−32 768, 32 767]int16(1000)
uint1616❌ Non[0, 65 535]uint16(60000)
int3232✅ Oui[−2 147 483 648, 2 147 483 647]int32(1000000)
uint3232❌ Non[0, 4 294 967 295]uint32(4000000000)

Fonctions de conversion et inspection

FonctionDescriptioninttype retourne
int8(x)Convertit en entier signé 8 bits1
int16(x)Convertit en entier signé 16 bits2
int32(x)Convertit en entier signé 32 bits4
uint8(x)Convertit en entier non signé 8 bits11
uint16(x)Convertit en entier non signé 16 bits12
uint32(x)Convertit en entier non signé 32 bits14
inttype(x)Retourne le code du type entier de x
iconvert(x, t)Convertit x vers le type de code t

Exemple n°3 — Création et inspection de types entiers

a = int8(3)
b = uint8(3)
c = int32(3)
d = uint32(3)

disp("inttype(a) = " + string(inttype(a)))    // 1  → int8
disp("inttype(b) = " + string(inttype(b)))    // 11 → uint8
disp("inttype(c) = " + string(inttype(c)))    // 4  → int32
disp("inttype(d) = " + string(inttype(d)))    // 14 → uint32
Sortie
inttype(a) = 1.
inttype(b) = 11.
inttype(c) = 4.
inttype(d) = 14.
Danger — Débordement silencieux (overflow) En Scilab, dépasser la plage d'un type entier provoque un écrêtage silencieux(saturation) sans message d'erreur. Le résultat est tronqué à la valeur maximale :
x = int8(200)     // ❌ dépasse [−128, 127]
disp(x)           // → 127  (saturation à la valeur max)

y = uint8(-5)     // ❌ négatif sur un type non signé
disp(y)           // → 0   (saturation à la valeur min)

4. Virgules flottantes

Définition — Double précision Par défaut, tous les nombres en Scilab sont stockés en double précision IEEE 754 (64 bits). Cette représentation offre une précision relative de l'ordre de 10⁻¹⁶ et une plage allant jusqu'à ≈ 1.8 × 10³⁰⁸. C'est le type utilisé pour la quasi-totalité du calcul numérique.
CaractéristiqueValeur
Stockage64 bits (double précision IEEE 754)
Précision relative≈ 10⁻¹⁶ (environ 15–16 chiffres significatifs)
Plus petit positif%eps ≈ 2.22 × 10⁻¹⁶
Plus grand nombre%inf ≈ 1.8 × 10³⁰⁸
Résultat indéfini%nan (0/0, ∞−∞, …)
Attention — Calcul flottant ≠ calcul exact Contrairement aux logiciels de calcul formel (Maple, Mathematica), Scilab effectue du calcul numérique approché. Des erreurs d'arrondi de l'ordre de %epssont inévitables. Ne jamais tester l'égalité stricte entre flottants :
// ❌ Comparaison stricte dangereuse
disp(0.1 + 0.2 == 0.3)             // F  (erreur d'arrondi !)

// ✅ Comparaison avec tolérance
disp(abs(0.1 + 0.2 - 0.3) < %eps) // T

5. Chaînes de caractères

Définition — Chaîne Scilab Une chaîne de caractères est une séquence de caractères délimitée par des guillemets doubles "...". L'opérateur + permet la concaténation de chaînes. La fonction string() convertit n'importe quelle valeur numérique en chaîne.

Syntaxe — Chaînes de caractères Scilab
s = "bonjour"           // création
s1 + s2                 // concaténation
length(s)               // longueur
string(valeur)          // conversion numérique → chaîne
strsplit(s, sep)        // découpage
strsubst(s, old, new)   // remplacement
part(s, i:j)            // extraction de sous-chaîne
FonctionDescriptionExempleRésultat
s1 + s2Concaténation"foo" + "bar""foobar"
length(s)Longueurlength("bonjour")7.
string(x)Nombre → chaînestring(3.14)"3.14"
strsplit(s, sep)Découpagestrsplit("a,b,c", ",")["a","b","c"]
strsubst(s,old,new)Remplacementstrsubst("hello","l","r")"herro"
part(s, i:j)Sous-chaînepart("scilab", 1:3)"sci"

Exemple n°4 — Opérations sur les chaînes

x = "foo"
y = "bar"

// Concaténation
disp(x + y)                          // foobar

// Longueur
disp(length("bonjour"))              // 7

// Conversion nombre → chaîne pour affichage
n = 42
disp("La réponse est : " + string(n))  // La réponse est : 42

// Extraction d'une sous-chaîne (indices 1 à 3)
mot = "Scilab"
disp(part(mot, 1:3))                 // Sci

// Remplacement
disp(strsubst("hello world", "world", "Scilab"))  // hello Scilab
Sortie
foobar
7
La réponse est : 42
Sci
hello Scilab
Astuce — Affichage formaté avec string() Combiner string() et + permet de construire des messages d'affichage lisibles sans recourir à printf:
a = 3
b = 4
hyp = sqrt(a^2 + b^2)
disp("Hypoténuse de (" + string(a) + ", " + string(b) + ") = " + string(hyp))
// → Hypoténuse de (3, 4) = 5.

Récapitulatif — Types de données

TypeConstantes/CréationFonctions clésPiège principal
Booléen%t, %f& | ~Vaut 1/0 en arithmétique
Complexea + b*%ireal, imag, abs, conjisreal%f même si imag = 0
Entier signéint8/16/32inttype, iconvertSaturation silencieuse si overflow
Entier non signéuint8/16/32inttype, iconvertValeurs négatives → 0
Flottant3.14, 2e-5%eps, %inf, %nanNe jamais tester == entre flottants
Chaîne"texte"+, string, length, part+ concatène, ne convertit pas les nombres

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.