Benutzer-Werkzeuge

Webseiten-Werkzeuge


einstieg:weiteredatentypen:start

Dies ist eine alte Version des Dokuments!


Diese Seite ist noch eine Baustelle!

Die Datentypen float, double

Wir haben bisher nur den Datentyp int zum Speichern von ganzzahligen Werten kennengelernt. Es wird Zeit, dass wir auch andersartige Daten speichern können!

float

Variablen vom Datentyp float können rationale Zahlen (näherungsweise) zu speichern. Die Bezeichnung dieses Datentyps ist eine Kurzform für "floating point number", auf Deutsch "Fließkommazahl" oder "Gleitkommazahl".

Falls es Dich genauer interessiert, in welcher Form diese Zahlen gespeichert werden, findest Du in Wikipedia eine gute Darstellung. Schön anschaulich ist auch dieses Video.

Führe das folgende Beispielprogramm in Einzelschritten aus und schau' Dir den dabei den Inhalt des Reiters "Variablen" auf der rechten Seite an!


float-Werte in Java entsprechen Dezimalzahlen mit ungefähr 7 gültigen Ziffern und verbrauchen jeweils 4 Byte Speicherplatz. Da es nur endlich viele ($2^{32}$) verschiedene float-Werte gibt, decken sie nur einen kleinen Teil aller (unendlich vielen!) rationalen Zahlen ab, und auch diesen nicht gleichmäßig: Die durch float-Werte exakt darstellbaren Zahlen liegen um die Zahl 0 herum am dichtesten. Ihre Dichte nimmt sowohl in positiver als auch in negativer Richtung von 0 an immer weiter ab, siehe hier.

Besonderheit von LearnJ: Die Programmiersprache auf dieser Website speichertfloat-Werte intern als double-Werte (siehe unten), rechnet also immer mit doppelter Genauigkeit (ca. 14 gültige Ziffern). Die Ursache dafür liegt im Browser, in dem Du diese Website betrachtest. Er kennt nur einen einzigen Datentyp für Zahlen, der von der Genauigkeit her den double-Werten in Java entspricht.

Ganzzahldivision/Gleitkommazahldivision

Rätsel:
Welche Zahl gibt das folgende Programm aus? Warum?



Je nach Datentyp der Operatoren wirkt der Operator / ("geteilt durch") unterschiedlich. Am folgenden Beispiel kannst Du das deutlich sehen:



Erklärung:

Da beide Operanden der Division in Zeile 1 ganzzahlige Werte sind, wird die Division als Ganzzahldivision ausgeführt, entsprechend ist $5 : 3 = 1$. In Zeile 2 wird der Compiler durch die Schreibweise 5.0 gezwungen, den 1. Operanden als Gleitkommazahl zu speichern, entsprechend wandelt er auch den 2. Operanden in eine Gleitkommazahl um, bevor er die Division als Gleitkommadivision ausführt.

double

Variablen vom Datentyp double können - ähnlich wie float-Variablen - rationale Zahlen (näherungsweise) speichern, verwenden dazu jeweils doppelt so viel Speicherplatz (64 Bit je Wert) und sind daher doppelt genau. → Daher auch der Name ;-).

Ein double-Wert besitzt ca. 14 gültige Ziffern.

Einfaches Beispiel:
Ein Kapital von 1000 € wird jährlich mit 3 % verzinst. Wie viel Geld ist nach 0, 1, 2, … Jahren auf dem Konto?



Die Klasse Math

Zum Rechnen mit double-Werten gibt es nicht nur die Operatoren +, -, * und /, sondern auch viele Funktionen wie $sin$, $cos$, $sqrt$ usw. . Diese Funktionen findest Du als statische Methoden (dazu später mehr…) in der Klasse Math. Ihre Benutzung ist sehr einfach:



Die Klasse Math besitzt noch viel mehr nützliche Methoden. Tippe ins Programm oben in Zeile 5 einfach mal Math. ein und sieh' Dir an, welche Methoden Dir der Editor vorschlägt!

Runden von Zahlen

Kann man im Programm aus einem double oder float-Wert einen ganzzahligen int-Wert machen? → Klar, aber man muss dem Computer sagen, wie er dabei runden soll:



Runden auf eine vorgegebene Zahl von Nachkommastellen

Wie kann man eine Zahl beispielsweise auf 3 Nachkommastellen runden? Löse das Problem mit Hilfe der oben angegebenen Funktionen!



Lösung

Zufallszahlen

Die Methode Math.random() ermittelt bei jedem Aufruf eine neue Zufallszahl im Intervall $[0 \ldots 1[$:



Aufgabe: Ganzzahlige Zufallszahl aus der Menge $\{0; 1; 2; \ldots 98; 99\}$



Starte das Programm mehrmals hintereinander, um verschiedene Zufallszahlen zu sehen.

Erklärung
  1. Math.random() ergibt eine rationale Zahl aus dem Intervall $[0 \ldots 1[$.
  2. Math.random() * 100 ergibt eine rationale Zahl aus dem Intervall $[0 \ldots 100[$.
  3. Math.floor() macht aus allen Zahlen aus dem Intervall $[0 \ldots 1[$ die 0, aus allen Zahlen aus dem Intervall $[1 \ldots 2[$ die 1, …, und aus allen Zahlen aus dem Intervall $[99 \ldots 100[$ die 99.

Aufgabe:

Schreibe ein Programm, das eine ganzzahlige Zufallszahl aus der Menge $\{5; 6; 7; \ldots 11; 12\}$ ausgibt!

Lösung mit ausführlicher Erklärung

einstieg/weiteredatentypen/start.1601820197.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki