3 Stimmen

Ada: Konstante Deklaration

Ich lese gerade Norman Cohens Ada-95-Buch, und auf Seite 129 finden wir die ständigen Erklärungen:

 Pi: constant Float := 3.1415926536

y

Pi: constant := 3.1415926536

Die zweite Erklärung soll wie folgt interpretiert werden, ich zitiere: "eine beliebige Fließkommazahl vom Typ Festkomma mit dem entsprechenden Bereich". Meine Frage ist, wenn man mit Long_Float-Präzision arbeitet, muss man z.B. eine Konstante, z.B. 2*PI, speziell deklarieren wie

Two_Pi : CONSTANT Long_Float := 2.0 * 3.1415926536

oder noch viel besser:

Two_Pi: CONSTANT Long_Float :=  2.0 * Ada.Numerics.Pi;

(die zweite Erklärung, um mehr Nachkommastellen nutzen zu können) ?

Würde

Two_Pi : CONSTANT := 2.0 * 3.1415926536   

oder besser noch

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

so gut sein, wie in dem Buch behauptet wird, so dass der Ada-Compiler z. B. weiß, wenn ich Two_Pi in einer Long_Float-Berechnung verwende, dann würde der Compiler die erforderliche Anzahl von Präzisionsziffern liefern? Da der Pi-Wert 3.1415926536 nicht vom Typ Long_Float ist (da er weniger Präzisionsziffern hat), nehme ich an, dass die letzte Deklaration, d.h.

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

wäre alles, was erforderlich ist, wenn ich Two_Pi in einer Long_Float-Berechnung benötige. Habe ich das richtig verstanden? Mit einem ähnlichen Verständnis, dann

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

wäre auch bei einer Berechnung vom Typ Float relevant, und der Compiler würde nur die erforderliche Anzahl von Präzisionsziffern liefern.

Vielen Dank...

3voto

trashgod Punkte 199887

Number Declarations wie zum Beispiel

Two_Pi : constant := 2.0 * Ada.Numerics.Pi;

werden gelegentlich als genannte Nummern . Eine solche Zahl ist universal "in dem Sinne, dass es akzeptabel ist, wenn ein bestimmter Typ in der Klasse erwartet wird (siehe 8.6 )."

Nachtrag: Da solche Zahlen universal können sie "als Operanden mit den primitiven Unterprogrammen eines beliebigen Typs der entsprechenden Klasse verwendet werden". Zum Beispiel, Two_Pi kann multipliziert werden mit Float , Long_Float oder jeder von universal_real .

In diesem Zusammenhang könnte Ihnen diese Ada gefallen verbindlich zu den GNU GMP- und MPFR-Bibliotheken.

Nachtrag: Die Bindung erlaubt es, die GNU-Bibliotheken von Ada aus zu verwenden, wie in diesem Beispiel .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X