use strict;
use warnings;
use Math::BigFloat;

# Erzeugen von BigFloat-Objekten:
my $pi  = Math::BigFloat->new('3.14159265358979323846264338328');
my $e   = Math::BigFloat->new('2.71828182845904523536028747135');
my $one = Math::BigFloat->bone();    # 1.0 als BigFloat
# es gibt noch:
#    Math::BigFloat->bzero()     +0
#    Math::BigFloat->bnan()      NaN (Not a Number)
#    Math::BigFloat->binf()      Unendlich (siehe unten)

# Die arithmetischen Operatoren wurden ueberladen:
my $pi_plus_e      = $pi + $e;
my $e_minus_pi     = $e  - $pi;
my $pi_mal_minus_e = $pi * -$e;
my $pi_durch_e     = $pi / $e;
# fsqrt (und andere) weisen dem Operanden den Ergebniswert zu
# deshalb mache ich vorher eine (anonyme) Kopie
my $wurzel_e       = $e->copy()->fsqrt();  

# Die Ausgabe erfolgt in kanonischer Form:
print '$pi       --> ', $pi, "\n";
print '$e        --> ', $e,  "\n\n";

print '$pi + $e  --> ', $pi_plus_e, "\n";
print '$e  - $pi --> ', $e_minus_pi, "\n";
print '$pi * -$e --> ', $pi_mal_minus_e, "\n";
print '$pi / $e  --> ', $pi_durch_e, "\n";
print 'Wurzel $e --> ', $wurzel_e, "\n\n";

# Siehe Dokumentation von Math::BigFloat zur Anzahl der Stellen.
# BigFloat- und normale Zahlen koennen gemischt werden.
print '1 / 3     --> ', $one / 3.0, "\n";

# Nicht-Zahlen (NaN) bei ungueltigen Operationen:
my $none =Math::BigFloat->bone('-');    # -1.0 als BigFloat;
print 'fsqrt(-1) --> ', $none->fsqrt(), "\n";

print '+inf      --> ', Math::BigFloat->binf(), "\n";
print '-inf      --> ', Math::BigFloat->binf('-'), "\n\n";

# Die folgenden Beispiel arbeiten mit jeweils 100 Stellen
$pi = Math::BigFloat->bpi(100);   # PI auf 100 Stellen
my $cos  = Math::BigFloat->new(1)->bcos(100); 
my $sin  = Math::BigFloat->new(1)->bsin(100);
my $atan = Math::BigFloat->new(1)->batan(100);
print 'PI        --> ', $pi, "\n";
print 'cos(1)    --> ', $cos, "\n";
print 'sin(1)    --> ', $sin, "\n";
print 'atan(1)   --> ', $atan, "\n";
