Autor Beitrag
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Di 06.09.05 13:12 
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?

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 37

Win XP, Win 2000, Win 98, Win NT4
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 120
Erhaltene Danke: 18


D2005 Personal
BeitragVerfasst: Di 06.09.05 13:36 
Hier liegt wahrscheinlich ein Missverständnis vor.

In Delphi gibt's folgende Gleitkommazahltypen:
ausblenden 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
Hält's aus hier
Beiträge: 10


D6 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 120
Erhaltene Danke: 18


D2005 Personal
BeitragVerfasst: 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 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.
Kjell
Hält's aus hier
Beiträge: 10


D6 Pers
BeitragVerfasst: 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.

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

Vielen Dank, ich bin beruhigt!

Kjell
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: 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.