Die Programmiersprache Ruby (German Edition)
dann wird das Ergebnis transparent in eine
Bignum
konvertiert. Wenn das Ergebnis einer Operation mit
Bignum
-Objekten entsprechend in den Bereich von
Fixnum
fällt, dann ist das Ergebnis eine
Fixnum
. Reelle Zahlen erhalten in Ruby einen Näherungswert durch die Klasse
Float
, die die native Fließkommadarstellung der jeweiligen Plattform verwendet.
Die Klassen
Complex
,
BigDecimal
und
Rational
sind nicht in Ruby eingebaut, sondern werden als Teil der Standardbibliothek mit Ruby geliefert. Die Klasse
Complex
stellt natürlich komplexe Zahlen dar.
BigDecimal
stellt reelle Zahlen mit beliebiger Genauigkeit dar, wofür eine dezimale statt einer binären Darstellung zum Einsatz kommt. Und
Rational
stellt rationale Zahlen dar: die Division eines Integers durch einen anderen.
Alle numerischen Objekte sind unveränderlich ; es gibt keine Methoden, mit denen Sie den in einem Objekt gespeicherten Wert ändern können. Wenn Sie einer Methode eine Referenz auf ein numerisches Objekt übergeben, brauchen Sie sich keine Sorgen zu machen, dass die Methode das Objekt modifiziert.
Fixnum
-Objekte werden häufig verwendet, und Ruby-Implementierungen behandeln sie üblicherweise als unmittelbare Werte statt als Referenzen. Da Zahlen jedoch unveränderlich sind, besteht keine Möglichkeit, den Unterschied zu erkennen.
3.1.1 Integer-Literale
Ein Integer-Literal ist einfach eine Abfolge von Ziffern:
0
123
12345678901234567890
Wenn die Integer-Werte in den Bereich der Klasse
Fixnum
passen, ist der Wert eine
Fixnum
. Andernfalls ist er eine
Bignum
, die Integer beliebiger Größe unterstützt. In Integer-Literale können Unterstriche eingefügt werden (außer am Anfang oder am Ende), und dieses Feature wird manchmal als Tausendertrennzeichen verwendet:
1_000_000_000 # Eine Milliarde
Wenn ein Integer-Literal mit null beginnt und mehr als eine Ziffer enthält, wird es als Zahl mit einer anderen Basis als 10 interpretiert. Zahlen, die mit
0x
oder
0X
beginnen, sind hexadezimal (Basis 16) und verwenden die Buchstaben
a
bis
f
(oder
A
bis
F
) als Ziffern für 10 bis 15. Zahlen, die mit
0b
oder
0B
beginnen, sind binär (Basis 2) und können nur die Ziffern
0
und
1
enthalten. Zahlen, die mit
0
ohne nachfolgenden Buchstaben beginnen, sind oktal (Basis 8) und können aus Ziffern zwischen
0
und
7
bestehen. Beispiele:
0377 # Oktale Darstellung von 255
0b1111_1111 # Binäre Darstellung von 255
0xFF # Hexadezimale Darstellung von 255
Um eine negative Zahl darzustellen, beginnen Sie ein Integer-Literal einfach mit einem Minuszeichen. Literale können auch mit einem Pluszeichen beginnen, aber das ändert niemals die Bedeutung des Literals.
3.1.2 Fließkomma-Literale
Ein Fließkomma-Literal ist ein optionales Vorzeichen, gefolgt von einer oder mehreren Dezimalziffern, einem Dezimalpunkt (dem Zeichen
.
), einer oder mehreren zusätzlichen Ziffern und einem optionalen Exponenten. Ein Exponent beginnt mit den Buchstaben
e
oder
E
, gefolgt von einem optionalen Vorzeichen und einer oder mehreren Dezimalziffern. Genau wie in Integer-Literalen können auch in Fließkomma-Literalen Unterstriche verwendet werden. Anders als bei Integer-Literalen ist es jedoch nicht möglich, Fließkommawerte mit einer anderen Basis als 10 darzustellen. Hier einige Beispiele für Fließkomma-Literale:
0.0
-3.14
6.02e23 # Das bedeutet 6.02 ∞ 1023
1_000_000.01 # Eine Million und ein bisschen mehr
In Ruby ist es notwendig, dass vor und hinter dem Dezimalpunkt Ziffern stehen. Sie können beispielsweise nicht einfach
.1
schreiben; Sie müssen explizit
0.1
schreiben. Das ist notwendig, um Mehrdeutigkeiten in der komplexen Ruby-Grammatik zu vermeiden. Ruby weicht in diesem Punkt von vielen anderen Sprachen ab.
3.1.3 Arithmetik in Ruby
Alle numerischen Typen in Ruby definieren die Standardoperatoren
+
,
-
,
*
und
/
für Addition, Subtraktion, Multiplikation beziehungsweise Division. Wenn ein Integer-Ergebnis zu groß für eine
Fixnum
ist, konvertiert Ruby es automatisch in eine
Bignum
, so dass die Integer-Arithmetik in Ruby im Ergebnis niemals überläuft wie in vielen anderen Sprachen. Fließkommazahlen (zumindest auf Plattformen, die die Standard-Fließkommadarstellung gemäß IEEE-754 verwenden) laufen zu speziellen positiven oder negativen Unendlichkeitswerten über, während zu kleine Werte null werden.
Der Divisionsoperator hängt von der Klasse der Operanden ab. Wenn beide Operanden Integer sind, dann ist die ausgeführte Operation eine abgeschnittene Integer-Division.
Weitere Kostenlose Bücher