Einzelnen Beitrag anzeigen

Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#11

Re: Exponent aus Extended extrahieren?

  Alt 2. Mai 2009, 17:53
ich habs jetzt so:
aber leider funktioniert: Fild qword ptr [&left.FBCD9]
nicht. Da muss bei Class Operatoren irgendwas anderes übergeben werden.
Auch dem Result kann man nix geben ..



Delphi-Quellcode:
//====[ * ]===================================================================
class operator FIXCOMMA64.Multiply(const Left, Right: FIXCOMMA64): FIXCOMMA64;
const I10 : LongInt = 10;
      BCD8INT : LongInt = 100000000;
var
  // val: extended;
  f1, f2 : int64;
begin
// Result.MaxValue
// val := (Left.FBCD9 / FBCD9EXT) * (Right.FBCD9 / FBCD9EXT);
//
// Result.FBCD9 := (Trunc(val)*FBCD9INT) + iDIV64(Round(frac(val)*FBCD10EXT), 10);
//
//exit;

  f1 := left.fbcd9;
  f2 := Right.fbcd9;
  asm
    // FILD I10
    // FILD BCD8INT
    Fild qword ptr [f1]
    Fild qword ptr [f2]
    // Fild qword ptr [&left.FBCD9]
    // Fild qword ptr [&right.FBCD9]
    fmulp st(1),st(0)
    // FDIVR
    fidiv dword ptr [&BCD8INT]
    FRNDINT
    // FDIVR
    fidiv dword ptr [&I10]
    FISTP qword [f1]
    wait
  end;
  Result.FBCD9 := f1;
end;

so ist der definiert:

Delphi-Quellcode:
type PFIXCOMMA64 = ^FIXCOMMA64; FIXCOMMA64 = packed record
strict private
    FBCD9: int64;
    class function Get_MinValue: FIXCOMMA64; static;
    class function Get_MaxValue: FIXCOMMA64; static;
  private
    function Get_DWORD: DWORD;
    function Get_Int64: Int64;
....
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat