SELFHTML

Nombres

Page d'information: vue d'ensemble

vers le bas Propriétés des nombres en Perl
vers le bas Formes de notation des nombres
vers le bas Opérations et fonctions pour les nombres

 vers le bas 

Propriétés des nombres en Perl

Perl travaille. lors de l'utilisation de processeurs 32 bits comme ils sont courants dans la plupart des ordinateurs aujourd'hui, en interne avec des nombres à virgule flottante de 32 bits d'après le standard IEEE754. Cela signifie pour la pratique que Perl, pour les nombres très élevés et très petits devient de moins en moins clair pour la représentation. Pour de tels nombres, Perl applique la forme de notation exponentielle pour la représentation. Plus les nombres sont grands ou petits, plus la représentation est inexacte. C'est ce que montre l'exemple suivant:

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/plain\n\n";

my $x = 12345678901234567890;
my $y = 0.000000000000000001;

print "x = $x\n";
print "y = $y\n";

$x = $x + 1;
$y = $y - 0.123456789123456789;

print "x = $x\n";
print "y = $y\n";

Explication:

L'exemple affecte à deux scalaires $x et $y respectivement un nombre assez élevé et un nombre assez petit. Ensuite les nombres sont sortis comme texte pur. Ensuite les deux scalaires sont poussées encore plus loin vers les extrêmes. À $x doit seulement être ajouté un nombre à un chiffre et de $y doit être soustrait un nombre avec d'assez nombreuses décimales. Après ces opérations, les deux scalaires sont sorties encore une fois. Perl donne la sortie suivante:
x = 1.23456789012346e+019
y = 1e-018
x = 1.23456789012346e+019
y = -0.123456789123457

Le nombre élevé de $x ne s'est pas modifié entre la première et la deuxième sortie malgré l'addition de 1, et pour la valeur de $y il est évident, que pour la deuxième sortie quelques positions derrière la virgule ont été sacrifiées.

Il existe néanmoins le Autre page d'information module standard Math, qui donne à Perl la capacité de représenter à souhait des nombres grands et petits et d'effectuer des opérations avec ces chiffres.

Exemple d'un script CGI complet:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);
use Math::BigInt;
use Math::BigFloat;

my $x = Math::BigInt->new('1234567890 1234567890');
my $y = Math::BigFloat->new('0.000000000000000001');

print "Content-type: text/plain\n\n";

print "x = $x\n";
print "y = $y\n";

$x = $x + 1;
$y = $y - 0.123456789123456789;

print "x = $x\n";
print "y = $y\n";

Explication:

L'exemple de script introduit les mêmes chiffres et exécute les mêmes opérations qu'auparavant mais en incorporant cette fois deux sous-modules de Math:
Avec use Math::BigInt; est incorporé un module pour la représentation et le calcul avec des nombres entiers élevés.
Avec use Math::BigFloat; est incorporé un module pour le représentation et le calcul avec des grands nombres avec décimales.
Pour créer un nombre avec ces modules, vous procédez comme indiqué: Pour les nombres entiers notez Math::BigInt->new('[nombre]'), et pour les nombres avec décimales Math::BigFloat->new('[nombre]'). Pour une meilleure lisibilité, vous pouvez aussi insérer des espaces dans le nombre, comme dans le premier des exemples ci-dessus. Ensuite, vous pouvez travailler tout à fait normalement avec les scalaires auxquelles vous avez affecté ces nombres. Vous pouvez sortir ces valeurs et les modifier comme dans l'exemple. L'exemple crée maintenant la sortie suivante:
x = +12345678901234567890
y = .000000000000000001
x = +12345678901234567891
y = -.123456789123456999

N'utilisez toutefois ces modules que pour de tels grands nombres. Car pour des calculs plus complexes, les nombres ainsi créés exigent beaucoup plus de ressources de calcul, étant donné qu'ils sont changés en interne en chaînes de caractères.

 vers le hautvers le bas 

Formes de notation des nombres

Vous pouvez en Perl noter les nombres ordinaires également de façon habituelle. Il est seulement important de ne pas perdre de vue que le signe décimal pour les "nombres décimaux" est le point. Vous pouvez noter des nombres négatifs en les faisant précéder du signe Moins. Pour les nombres positifs, vous pouvez également placer explicitement un signe Plus devant. Outre la notation courante dans le format décimal, vous pouvez également noter les nombres sous leur forme exponentielle, en octal ou en hexadécimal. Le tableau suivant offre un récapitulatif des possibilités de notations.

Exemple de notation Explication
243 Notation normale d'un nombre entier en format décimal.
-243 Notation d'un nombre entier négatif en format décimal.
+243 Notation d'un nombre entier explicitement positif en format décimal.
53.78 Notation d'un "nombre décimal". Le signe décimal est le point. Les signes Plus et Moins sont tout aussi possibles que pour les nombres entiers.
1.0e+4 Notation d'un nombre élevé sous forme exponentielle. Le nombre dans l'exemple équivaut à 10000. Le 4 à la fin donne donc le nombre de fois par lequel le nombre est multiplié par 10.
1.0e-4 Notation d'un petit nombre sous forme exponentielle. Le nombre équivaut à 0.0001.
0700 Notation d'un nombre entier sous forme octale. Ici, le nombre est simplement précédé par un 0 . Le nombre équivaut à 448.
0xF6 Notation d'un nombre entier sous forme hexadécimale. Ici le nombre est simplement précédé par la suite de caractères 0x. Le nombre équivaut à 246.

 
 vers le hautvers le bas 

Opérations et fonctions pour les nombres

Les nombres sont là avant tout pour les calculs. Perl soutient les opérations de base. Elles se font à l'aide des Autre page d'information opérateurs de calcul. Grâce à eux et une mise entre parenthèses de son choix peuvent être calculées par exemple des expressions comme (5*(6+8.00003))-7 sans plus de détours.

Par ailleurs Perl dispose aussi d'une série de fonctions mathématiques. Parmi elles se trouvent des fonctions générales comme Autre page d'information sqrt (calculer la racine carrée), mais aussi des fonctions trigonométriques comme Autre page d'information sin (sinus), Autre page d'information cos (cosinus) et Autre page d'information atan2 (Arc Tangente y/x), ainsi que des fonctions pour convertir comme Autre page d'information hex (convertir un nombre hexadécimal en nombre décimal) ou bien Autre page d'information oct (convertir un nombre octal en nombre décimal).

 vers le haut
page suivante Autre page d'information Instructions conditionnelles
page précédente Autre page d'information Chaînes de caractères (Strings)
 

© 2001 Stefan Münz / © 2003 Traduction Adresse électronique Serge François, 13405@free.fr
Adresse électronique selfhtml@fr.selfhtml.org