Ist single in Delphi nicht das gleiche wie float in Purebasic?
Haben beide 4 bytes.
Wenn ich aber single an Purebasic zurückgebe erhalte ich immer eine riesige merkwürdige Zahl, auch wenn ich eine ganz kleine zurückgebe.
Integer funktioniert problemlos.
delphi dll mit single rückgabewert?
-
QuickBasic
- Beiträge: 75
- Registriert: 11.09.2004 12:54
Hier mal ein Auszug aus der Delphi Hilfe:
Und hier eine Definition von Float, ob die allerdings auch für PB
Gültigkeit hat, weiss ich nicht, je nachdem definiert hier jeder
Hersteller seinen ganz "eigenen" Float-Typ
(Ausschnitt aus der Turbo C++- Hilfe)
Soweit ich das sehe, besteht hier durchaus ein Unterschied, es kommt
darauf an, WIE die Kommazahlen CompilerIntern verarbeitet werden,
und wenn die Verarbeitung GLEICH ist, dann klappts, ansonsten gibts
Probleme, mit der Typgröße hat DAS nichts zu tun!
Code: Alles auswählen
Realtypen
Ein Realtyp ist eine Untermenge der reellen Zahlen, die als Gleitkommazahl mit einer festen Stellenanzahl dargestellt werden können.
Es gibt fünf Arten von Realtypen. Sie unterscheiden sich in ihrem Wertebereich, der Genauigkeit der Werte und im Speicherplatzbedarf.
Typ Bereich Stellen Bytes
Real 2.9 * 10-39 .. 1.7 * 1038 11-12 6
Single 1.5 * 10-45 .. 3.4 * 1038 7-8 4
Double 5.0 * 10-324 .. 1.7 * 10308 15-16 8
Extended 3.4 * 10-4932 .. 1.1 * 104932 19-20 10
Comp -263+1 .. 263-1 19-20 8
Der Typ Comp speichert nur integrierteWerte von-263+1 bis 263-1 (näherungsweise -9.2 * 1018 bis 9.2 * 1018).
Delphi unterstützt zwei Modelle der Code-Erzeugung, um Operationen mit Realtypen durchzuführen:
Gleitkommaberechnungen per Software
80x87 Gleitkommaberechnungen
Verwenden Sie die Compileranweisung $N, um das entsprechende Modell auszuwählen.
Gültigkeit hat, weiss ich nicht, je nachdem definiert hier jeder
Hersteller seinen ganz "eigenen" Float-Typ
(Ausschnitt aus der Turbo C++- Hilfe)
Code: Alles auswählen
float 32 Bits 3.4 * (10**-38) bis 3.4 * (10**+38)
darauf an, WIE die Kommazahlen CompilerIntern verarbeitet werden,
und wenn die Verarbeitung GLEICH ist, dann klappts, ansonsten gibts
Probleme, mit der Typgröße hat DAS nichts zu tun!
-
FloHimself
- Beiträge: 338
- Registriert: 05.09.2004 18:47
Unabhängig von den unterschiedlichen Wertebereichen, werden in Delphi Funktionsergebnisse der Real-Typen im Top-of-Stack-Register des Coprozessors für Gleitkommazahlen (ST(0)) zurückgegeben.
Probier es mal hiermit:
Probier es mal hiermit:
Code: Alles auswählen
RetValue.f = 0.0
CallFunction(0, "GetSingle")
!FST [v_RetValue]
Debug RetValueIch vermute das Problem ist hier das CallFunction(Fast) ein
Long zurückgibt. Dieses Long muß man erst speichern und
dann in ein Float ziehen:
Oder:
Long zurückgibt. Dieses Long muß man erst speichern und
dann in ein Float ziehen:
Code: Alles auswählen
retval = CallFunction(...)
float.f = PeekF( @retval )Code: Alles auswählen
float.f = 0.0
CallFunction(...)
!MOV [v_float], EAXcya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck