SELFHTML

Zahlen

Informationsseite

nach unten Eigenschaften von Zahlen in Perl
nach unten Schreibweisen von Zahlen
nach unten Operationen und Funktionen für Zahlen

 nach unten 

Eigenschaften von Zahlen in Perl

Perl operiert bei Einsatz von 32-Bit-Prozessoren, wie sie heute bei den meisten Computern üblich sind, intern mit 32 Bit breiten Gleitpunktzahlen nach dem Standard IEEE754. Das bedeutet für die Praxis, dass Perl bei sehr großen Zahlen und sehr kleinen Zahlen tendenziell immer "undeutlicher" wird in der Darstellung. Bei solchen Zahlen wendet Perl zur Darstellung die Exponentialschreibweise an. Je größer bzw. kleiner die Zahlen jedoch werden, desto ungenauer ist die Darstellung. Das folgende Beispiel zeigt dies:

Beispiel eines vollständigen CGI-Scripts:

#!/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";

Erläuterung:

Das Beispiel zwingt zwei Skalaren $x und $y jeweils eine ziemlich große und eine ziemlich kleine Zahl auf. Anschließend werden die Zahlen als reiner Text ausgegeben. Dann werden die beiden Skalare noch weiter traktiert. $x soll nur eine einzige Zahl dazuzählen, und bei $y soll eine ziemlich vielstellige Gleitpunktzahl subtrahiert werden. Nach diesen Operationen werden beide Skalare nochmals ausgegeben. Perl erzeugt folgende Ausgabe:
x = 1.23456789012346e+019
y = 1e-018
x = 1.23456789012346e+019
y = -0.123456789123457

Die große Zahl von $x hat sich bei der zweiten Ausgabe gebenüber der ersten Ausgabe also trotz der Addition von 1 nicht verändert, und bei dem Wert von $y ist offensichtlich, dass bei der zweiten Ausgabe ein paar Stellen hinter dem Komma dran glauben mussten.

Es gibt jedoch das Seite Standardmodul Math, das Perl befähigt, potentiell beliebig große und kleinen Zahlen darzustellen und damit zu rechnen.

Beispiel eines vollständigen CGI-Scripts:

#!/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";

Erläuterung:

Das Beispielscript führt die gleichen Zahlen und Operationen ein wie zuvor, aber diesmal bindet es zwei Untermodule von Math ein:
Mit use Math::BigInt; wird ein Modul zum Darstellen von und Rechnen mit großen Ganzzahlen eingebunden.
Mit use Math::BigFloat; wird ein Modul zum Darstellen von und Rechnen mit großen Gleitpunktzahlen eingebunden.
Um eine Zahl mit diesen Modulen zu erzeugen, gehen Sie vor wie gezeigt: bei Ganzzahlen notieren Sie Math::BigInt->new('[Zahl]'), und bei Gleitpunktzahlen Math::BigFloat->new('[Zahl]'). Zur besseren Übersicht dürfen Sie in die Zahl auch Leerzeichen einfügen, wie im ersten der obigen Beispiele gezeigt. Anschließend können Sie mit den Skalaren, denen Sie solche Zahlen zugewiesen haben, ganz normal arbeiten. Sie können die Werte ausgeben und verändern, so wie im Beispiel. Das Beispiel erzeugt nun folgende Ausgabe:
x = +12345678901234567890
y = .000000000000000001
x = +12345678901234567891
y = -.123456789123456999

Benutzen Sie diese Module jedoch nur bei solchen großen Zahlen. Denn die bei komplexeren Rechenoperationen beanspruchen die so erzeugten Zahlen deutlich mehr Rechenleistung, da sie intern in Zeichenketten umgewandelt werden.

 nach obennach unten 

Schreibweisen von Zahlen

Gewöhnliche Zahlen können Sie in Perl auch wie gewohnt notieren. Wichtig ist nur zu beachten, dass das Dezimalzeichen bei "Kommazahlen" der Punkt ist. Negative Zahlen können Sie notieren, indem Sie ein Minuszeichen voranstellen. Bei positiven Zahlen können Sie auch ein explizites Pluszeichen voranstellen. Neben der gewöhnlichen Notation im Dezimalformat können Sie Zahlen aber auch in Exponentialschreibweise, oktal oder hexadezimal notieren. Die folgende Tabelle bietet eine Übersicht der Notationsmöglichkeiten.

Notationsbeispiel Erläuterung
243 Normale Notation einer Ganzzahl im Dezimalformat.
-243 Notation einer negativen Ganzzahl im Dezimalformat.
+243 Notation einer explizit positiven Ganzzahl im Dezimalformat.
53.78 Notation einer "Kommazahl". Dezimalzeichen ist der Punkt. Minus- und Pluszeichen sind genauso möglich wie bei Ganzzahlen.
1.0e+4 Notation einer großen Zahl in Exponentialschreibweise. Die Zahl im Beispiel bedeutet so viel wie 10000. Die 4 am Ende gibt also die Anzahl der Zehner-Potenzen an.
1.0e-4 Notation einer kleinen Zahl in Exponentialschreibweise. Die Zahl bedeutet so viel wie 0.0001.
0700 Notation einer Ganzzahl in Oktalschreibweise. Dabei wird einfach eine 0 vorangestellt. Die Zahl bedeutet dezimal so viel wie 448.
0xF6 Notation einer Ganzzahl in Hexadezimalschreibweise. Dabei wird einfach die Zeichenfolge 0x vorangestellt. Die Zahl bedeutet dezimal so viel wie 246.

 
 nach obennach unten 

Operationen und Funktionen für Zahlen

Zahlen sind hauptsächlich zum Rechnen da. Perl unterstützt die Grundrechenarten. Zuständig dafür sind die Seite Berechnungsoperatoren. Mit ihrer Hilfe und beliebiger Klammerung lassen sich z.B. Ausdrücke wie (5*(6+8.00003))-7 ohne weiteren Umweg berechnen.

Daneben bietet Perl auch eine Reihe mathematischer Funktionen an. Darunter befinden sich allgemeine Funktionen wie Seite sqrt (Quadratwurzel errechnen), aber auch trigonomische Funktionen wie Seite sin (Sinus), Seite cos (Cosinus) und Seite atan2 (Arcus Tangens y/x), sowie Umrechnungsfunktionen wie Seite hex (Hexadezimalzahlen in Dezimalzahlen umrechnen) oder Seite oct (Oktalzahlen in Dezimalzahlen umrechnen).

 nach oben
weiter Seite Bedingte Anweisungen
zurück Seite Zeichenketten (Strings)
 

© 2001 E-Mail selfhtml@teamone.de