4. Typen und Datenstrukturen
 
zurück

4.3.1.3 Reelwertige Typen


Ein reeller Typ definiert eine Menge von Werten, die Näherungen für einen Ausschnitt aus der Menge der reellen Zahlen sind. Zahlen werden binär gespeichert. Da eine Implementierung nur eine endliche Anzahl von Bits für Zahlen zur Verfügung stellen kann, ist es unmöglich, jede reelle Zahl exakt im Rechner darzustellen. Die dadurch entstehende Ungenauigkeit wird als Rundungsfehler bezeichnet.

Rundungsfehler sind ein ernstes Problem vor allem in Programmen für eingebettete Systeme (z.B. Autopilot, Kraftwerkssteuerung).

Bei der Berechnung komplexer Algorithmen können sich kleine Abweichungen zu nicht vernachlässigbaren Fehlern akkumulieren. Damit Ada auch für numerische Berechnungen hohe Zuverlässigkeit bieten kann, wird für reelle Typen eine minimale Genauigkeit festgelegt.

Die Genauigkeit wird durch die Deklaration des Gleit- oder Festpunkttyps festgelegt und ist daher unabhängig von der Zielhardware. Das erleichtert es, Programme zu schreiben, die mit einer garantierten Minimalgenauigkeit auf jeder Maschine laufen, für die das Programm übersetzt werden kann. Der Ada-Übersetzer versucht, die geforderte Genauigkeit auf die Zielhardware abzubilden. Ist die geforderte Genauigkeit nicht zu implementieren, führt dies zu einem Übersetzungsfehler.

In Ada besteht die Möglichkeit, reellwertige Datentypen selbst zu definieren. Hier wurde den Schwierigkeiten der Portierung numerischer Software Rechnung getragen, indem durch Einführung von Modellzahlen Mindestanforderungen an die Genauigkeit von reellwertigen Zahldarstellungen gestellt werden können.

Aufgrund der approximativen Darstellung sind beim Arbeiten mit reellwertigen Daten zwei Fehlerarten zu unterscheiden (x bezeichnet die tatsächliche Zahl und xd die endliche Darstellung):


- absolute Fehler - die absolute Abweichung der Darstellung von der tatsächlichen Zahl

- relative Fehler - die Abweichung der Darstellung von der tatsächlichen Zahl in Relation zur Größe der Zahl



Beispiel:




Ada stellt entsprechend zwei verschiedene Klassen von Datentypen mit reellwertigen Wertebereichen zur Verfügung:
Gleit- und Festpunkttypen. Reellwertige Literale sind vom anonymen Typ universal_real. Gleit- und Festpunkttypen haben zwar keine eigenen Literale, jedoch werden die reellwertigen Literale implizit konvertiert.

  • Folgende Operationen sind für Gleitpunkt- und Festpunkttypen vordefiniert:
  • explizite Typumwandlung
  • Qualifizierung
  • Zuweisung
  • relational e Operationen (=, /=, <, <=, >, >=)
  • mathematische Grundopertionen (+, -, *, /)
  • Zugehörigkeitsoperation (not in)
  • Exponentiation (**)

Bei der Exponentiation ist zu beachten, dass der Exponend immer ganzzahlig sein muss.

Beispiel:

   ....
   type DEUTSCHE_MARK is new INTEGER;
   
   X : INTEGER;
   Mark : DEUTSCHE_MARK;
   F : FLOAT;
   Betrag : FLOAT := 50.50;
   ...
begin
   F := FLOAT(X);                    -- Explizite typumwandlung
   Mark := DEUTSCHE_MARK(Betrag);    -- Explizite typumwandlung
   if X**2 not in 0.0 .. 10.0 then
      Put("Quadrat X is nicht enthalten");
   end if;
...




 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.