# Mathematik

- Arithmetik
- Vergleichsoperatoren
- Funktionen
- Zufallszahlen

Auch wenn Perl eigentlich keine Sprache für numerische Berechnungen ist, steht doch eine Reihe von mathematischen Operatoren und Funktionen zur Verfügung.

## Arithmetik

- "`+`" positives Vorzeichen (unär)
- "`-`" negatives Vorzeichen (unär)
- "`+`" Addition (binär)
- "`-`" Subtraktion (binär)
- "`*`" Multiplikation
- "`/`" Division
- "`%`" Rest einer Division (Modulo)
- "`**`" Potenzbildung
- "`++`" Inkrement
- "`--`" Dekrement

Der In-(De-)krement-Operator erhöht (verringert) den Wert des Operanden um 1. Steht der Operator vor der Variablen, so wird zuerst die Inkrementierung (Dekrementierung) und anschließend die Auswertung der Variablen durchgeführt, umgekehrt ist es, wenn der Operator hinter der Variablen steht.

Beispiel :

`#!/usr/local/bin/perl -w use strict; my @array = (10,20,30); my $i = 1; print "$array[++$i]\n"; $i = 1; print "$array[$i++]\n";`

`30 20`

[Seitenanfang]

## Vergleichsoperatoren

Operatoren, die ihre Operanden in irgendeiner Weise miteinander vergleichen, liefern im allgemeinen einen Wahrheitswert (oft als boolean bezeichnet) zurück. Ein solcher hat die beiden möglichen Werte "wahr" (true) und "falsch" (false). Perl kennt, im Gegensatz zu einigen anderen Programmiersprachen, hierfür keinen eigenen Datentyp, sondern setzt "`1`" (Ziffer 1) als "wahren" Wert und "" (Leerstring) als "falschen" Wert.

- "`==`" liefert wahr bei Gleichheit
- "`!=`" liefert wahr bei Ungleichheit
- "`>`" liefert wahr, falls linkes Argument größer als rechtes Argument
- "`<`" liefert wahr, falls linkes Argument kleiner als rechtes Argument
- "`>=`" liefert wahr, falls linkes Argument größer oder gleich rechtem Argument
- "`<=`" liefert wahr, falls linkes Argument kleiner oder gleich rechtem Argument
- "`<=>`" liefert -1, 0 oder 1 je nachdem, ob linkes Argument kleiner, gleich oder größer als rechtem Argument

Achtung: Diese Vergleiche gelten nur im numerischen Kontext, d.h., wenn zwei Zahlen verglichen werden. Zum Vergleich von Zeichenketten sehen die Operatoren anders aus.

[Seitenanfang]

## Funktionen

- `abs($x)`

  Absolutwert von `$x`

- `atan2($x,$y)`

  Arcustangens von `$x/$y` (zwischen -pi und +pi, wobei pi=3,14159...)

- `cos($x)`

  Cosinus von `$x` (im Bogenmaß)

- `exp($x)`

  Exponentialfunktion ("e hoch `$x`", wobei e=2,71828...)

- `log($x)`

  Natürlicher Logarithmus von `$x` (Achtung: `$x` muß positiv sein. Außerdem gilt: `$x == log(exp($x))` für alle `$x`)

- `sin($x)`

  Sinus-Funktion von `$x` (im Bogenmaß)

- `sqrt($x)`

  Quadratwurzel aus `$x` (Achtung: `$x` muß positiv sein)

Mit Ausnahme von `atan2()` können die Funktionen auch ohne explizites Argument geschrieben werden; sie werden dann auf den jeweiligen Wert von `$_` angewandt.

Anmerkung: Weitere mathematische Funktionen finden sich im sogenannten POSIX-Modul, das zur Standard-Bibliothek von Perl gehört. Beispiel:

`#!/usr/local/bin/perl -w use POSIX; print log10(1000),"\n"; ## Logarithmus zur Basis 10`

[Seitenanfang]

## Zufallszahlen

(Pseudo-)Zufallszahlen werden in Perl mit der Funktion `rand()` erzeugt. Ohne Argument liefert sie Werte zwischen 0 und 1, ansonsten (Gleitkomma-) Zahlen zwischen 0 und dem Wert des Arguments. Um nicht jedesmal die gleiche Zahlenreihe zu erhalten, wird die Funktion `srand()` eingesetzt, die den Zufallszahlengenerator mit einer Zahl (Funktionsargument) initialisiert. Ohne Argument wird `srand(time)` ausgeführt, d.h. als Initialisierung dient die Zahl der Sekunden seit dem 1.1.1970.

Beispiel:

`#!/usr/local/bin/perl -w use strict; for(my $i = 0;$i < 3;$i++) { print "(1)".rand()."\n" } print "\n"; srand(12345678); for(my $i = 0;$i < 3;$i++) { print "(2)".rand(0.6)."\n" } print "\n"; srand(); # srand(time); for(my $i = 0;$i < 3;$i++) { print "(3)".rand(150)."\n" }`

`(1)0.1558837890625 (1)0.480255126953125 (1)0.754150390625 (2)0.0451620008307167 (2)0.445994871769363 (2)0.139236410776795 (3)142.277526855469 (3)71.8826293945312 (3)148.493957519531`

Bei mehrmaligem Abarbeiten des Skriptes ergeben sich nur bei den Zahlen der Gruppe `(2)` jeweils die gleichen Werte.

[Seitenanfang]

Autor: Eike Grote | Version: 2.05 (24.1.2012)