Entwickler-Ecke

Sonstiges (Delphi) - Real stirbt aus


Marco D. - Di 06.09.05 13:12
Titel: Real stirbt aus
Ich hab irgendwo gelesen dass Intel CPUs keine Real-Typen verarbeiten können. Stimmt das?
Das würde doch bedeuten dass Real ausstirbt. Wenn ja welchen Datentyp könnte man denn für solche Zahlen mit Kommastellen nehmen?


Delete - Di 06.09.05 13:14

:shock: Wo hast du denn das her? Dann würde ja die FPU wieder abgeschafft :shock: Das glaub ich so nicht. Hast du den Link zu der News?


laserflor - Di 06.09.05 13:27

Nun ja .. wenn man sich die Delphi-Hilfe zu Real-Typen ansieht, ist vielleicht damit gemeint, dass es keine Real-Zahlen mehr gibt, die 48 Bit (oder auch 32 Bit: Single) haben:

Delphi-Hilfe hat folgendes geschrieben:
Real48 wird nur aus Gründen der Abwärtskompatibilität verwendet. Da das Speicherformat dieses Typs kein natives Format der Intel-CPU ist, laufen die entsprechenden Operationen langsamer ab als mit anderen Gleitkommatypen.

Da ich schon etwas länger (schon mit Borland-Pascal) programmiere, habe ich mir für Gleitkommazahlen angewöhnt real zu schreiben. :oops:
Vielleicht sollte ich mich dann endlich mal an double gewöhnen: :wink:
Gruß Rolf

Moderiert von user profile iconTino: Quote-Tags hinzugefügt.


SMO - Di 06.09.05 13:36

Hier liegt wahrscheinlich ein Missverständnis vor.

In Delphi gibt's folgende Gleitkommazahltypen:

Quelltext
1:
2:
3:
4:
5:
Single   (32 Bit, nach IEEE 754 Standard)
Real48   (48 Bit)
Real     (Real48 oder Double, je nach Version/Einstellung)
Double   (64 Bit, nach IEEE 754 Standard)
Extended (80 Bit, natives Format der Intel x87 FPU)


Der Typ Real war ehemals (in Turbo Pascal und ich glaube bis inklusive Delphi 3) 48 Bit groß und wurde, im Gegensatz zu den anderen Gleitkommazahltypen, in der Tat noch nie hardwaremäßig vom Prozessor unterstützt. In den neueren Delphiversionen ist Real äquivalent zu Double, also eine 64 Bit Gleitkommazahl. Wenn man weiterhin den alten 48 Bit Typen will (was nicht zu empfehlen ist), muss man die Real-Variablen als Real48 deklarieren oder den Compilerschalter {$REALCOMPATIBILITY ON} benutzen.


Kjell - So 18.09.05 11:51
Titel: Double und Single wirklich nach IEEE?
Hmm,

wenn ich mir die Zahlenbereiche anschaue, dann habe ich den Eindruck, dass Delphi NICHT nach IEEE arbeitet (jedenfalls nicht nach single/double):

Delphi: [Delphi-Hilfe]
Single 1.5 x 10^-45 .. 3.4 x 10^38
Double 5.0 x 10^-324 .. 1.7 x 10^308

IEEE: [wikipedia, decken sich mit ca-Angaben in Patterson/Hennessy]
single: ±1,18·10-38 ... ±3,40·10+38
double: ±2,23·10-308 ... ±1,80·10+308

Weiß jemand mehr? Würde mich mal interessieren!

MfG
Kjell


SMO - So 18.09.05 16:08
Titel: Re: Double und Single wirklich nach IEEE?
user profile iconKjell hat folgendes geschrieben:
wenn ich mir die Zahlenbereiche anschaue, dann habe ich den Eindruck, dass Delphi NICHT nach IEEE arbeitet (jedenfalls nicht nach single/double)

Delphi benutzt die Intel x87 FPU Architektur zum Rechnen (außer man benutzt den alten Real-Typen, Real48, der wird in Software berechnet). Und x87 benutzt definitiv den IEEE 754 Standard für Single und Double, wer's nicht glaubt liest bei Intel nach.

Zitat:
Delphi: [Delphi-Hilfe]
Single 1.5 x 10^-45 .. 3.4 x 10^38
Double 5.0 x 10^-324 .. 1.7 x 10^308

IEEE: [wikipedia, decken sich mit ca-Angaben in Patterson/Hennessy]
single: ±1,18·10-38 ... ±3,40·10+38
double: ±2,23·10-308 ... ±1,80·10+308

Weiß jemand mehr? Würde mich mal interessieren!

Bei mir steht in der Delphi 2005 Hilfe:
Single -1.5 x 10^45 .. 3.4 x 10^38
Double -5.0 x 10^324 .. 1.7 x 10^308

Die oberen Angaben decken sich ja ungefähr (statt bei Double 1.79xxxx [http://en.wikipedia.org/wiki/Double_precision#Double_precision_examples] auf 1.8 aufzurunden, wurde es in der Delphi-Hilfe wahrscheinlich auf 1.7 abgeschnitten... die Angaben sind sowieso alle nicht genau).
Für die unteren Werte sieht es so aus, als ob die Wikipedia-Angaben den normalisierten und die Delphi-Hilfe den denormalisierten Wertebereich nutzen. Sie Zeilen 11, 12, 13 der Tabelle 1 auf dieser Seite [http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html].


Kjell - So 18.09.05 18:53
Titel: Re: Double und Single wirklich nach IEEE?
user profile iconSMO hat folgendes geschrieben:

Für die unteren Werte sieht es so aus, als ob die Wikipedia-Angaben den normalisierten und die Delphi-Hilfe den denormalisierten Wertebereich nutzen. Sie Zeilen 11, 12, 13 der Tabelle 1 auf dieser Seite [http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html].

That's it! :-) Danke! (Die Delphi-Angaben stehen aber SO in meiner Hilfe...)

Vielen Dank, ich bin beruhigt!

Kjell


Delphi-Laie - So 28.02.16 16:16

user profile iconSMO hat folgendes geschrieben Zum zitierten Posting springen:
Der Typ Real war ehemals (in Turbo Pascal und ich glaube bis inklusive Delphi 3) 48 Bit groß und wurde, im Gegensatz zu den anderen Gleitkommazahltypen, in der Tat noch nie hardwaremäßig vom Prozessor unterstützt. In den neueren Delphiversionen ist Real äquivalent zu Double, also eine 64 Bit Gleitkommazahl. Wenn man weiterhin den alten 48 Bit Typen will (was nicht zu empfehlen ist), muss man die Real-Variablen als Real48 deklarieren oder den Compilerschalter {$REALCOMPATIBILITY ON} benutzen.


Das kann ich bestätigen. Ab Delphi 4 gibt es ggf. andere Ergebnisse.

Das ist tückisch, wenn man das erstens nicht weiß und zweitens - irrtümlicherweise (trunc statt round verwendet) - auf eine Genauigkeit setzt, die sich mit dem Compilerwechsel ändert.