Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Mai 2009
in EAX ist hier nur der Pointer zu dem Record
EAX = 32 Bit
AX = 16 Bit
AL 8 Bit
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Mai 2009
also hier (D2009)ging das so, :gruebel:
wobei die direkte Integerversion doch eigentlich das Bessere sein sollte?
da es sich von den Speicheradressen nix nimmt, sollte es auch so gehn
und bei mir geht es auch. :angel2:
uses Math;
type PFIXCOMMA64 = ^FIXCOMMA64;
FIXCOMMA64 = packed record
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Mai 2009
ich glaub ich hab erstmal 'ne Lösung für den Bereich von etwas -96038,388 bis 96038,388 reicht aber aus, da die Multiplication bei rund 9223372036 = 96038*96038 eh einen Überlauf bringt.
(also 'ne Zahl kann natürlich auch größer als 96038,388 sein, wenn der andere Operand entsprechend kleiner ist)
Result := (left * right) div 1000000000;
***überlauf***
Result := left * (right...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
2. Mai 2009
Du weißt aber, daß du so über 'nen Extended gehst/rechnest und damit unter Umständen die letze (9.) Kommastelle einbüßt.
In welchem Bereich liegen denn deine Werte?
Wenn die im Bereich -9,223372036854775808 .. 9,223372036854775807 liegen, dann könnte man einfach:
class operator FIXCOMMA64.Multiply(const Left, Right: FIXCOMMA64): FIXCOMMA64;
var val: extended;
begin
Result.FBCD9 :=...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
1. Mai 2009
schau da mal in der FMath.pas die Functionen FloatConvert an.
http://www.delphipraxis.net/internal_redirect.php?p=891540#891540
Single 8/23
-eEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
Double 11/52
-eEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
Extended 15+1/63