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
Tino: 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?
Kjell 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?
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
SMO hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!