hedgewars/uFloat.pas
changeset 3599 715a43602da8
parent 3591 c447d5218f6f
child 3929 9a4bbc1f67a2
equal deleted inserted replaced
3598:a8aa06bae895 3599:715a43602da8
    20 
    20 
    21 unit uFloat;
    21 unit uFloat;
    22 interface
    22 interface
    23 
    23 
    24 {$IFDEF FPC}
    24 {$IFDEF FPC}
       
    25 {$INLINE ON}
    25 {$IFDEF ENDIAN_LITTLE}
    26 {$IFDEF ENDIAN_LITTLE}
    26 type hwFloat = record
    27 type hwFloat = record
    27                isNegative: boolean;
    28                isNegative: boolean;
    28                case byte of
    29                case byte of
    29                0: (Frac, Round: Longword);
    30                0: (Frac, Round: Longword);
    36                0: (Round, Frac: Longword);
    37                0: (Round, Frac: Longword);
    37                1: (QWordValue : QWord);
    38                1: (QWordValue : QWord);
    38                end;
    39                end;
    39 {$ENDIF}
    40 {$ENDIF}
    40 
    41 
    41 function int2hwFloat (const i: LongInt) : hwFloat;
    42 function int2hwFloat (const i: LongInt) : hwFloat; inline;
    42 
    43 
    43 operator + (const z1, z2: hwFloat) z : hwFloat;
    44 operator + (const z1, z2: hwFloat) z : hwFloat; inline;
    44 operator - (const z1, z2: hwFloat) z : hwFloat;
    45 operator - (const z1, z2: hwFloat) z : hwFloat; inline;
    45 operator - (const z1: hwFloat) z : hwFloat;
    46 operator - (const z1: hwFloat) z : hwFloat;
    46 
    47 
    47 operator * (const z1, z2: hwFloat) z : hwFloat;
    48 operator * (const z1, z2: hwFloat) z : hwFloat;
    48 operator * (const z1: hwFloat; const z2: LongInt) z : hwFloat;
    49 operator * (const z1: hwFloat; const z2: LongInt) z : hwFloat; inline;
    49 operator / (const z1: hwFloat; z2: hwFloat) z : hwFloat;
    50 operator / (const z1: hwFloat; z2: hwFloat) z : hwFloat;
    50 operator / (const z1: hwFloat; const z2: LongInt) z : hwFloat;
    51 operator / (const z1: hwFloat; const z2: LongInt) z : hwFloat;
    51 
    52 
    52 operator < (const z1, z2: hwFloat) b : boolean;
    53 operator < (const z1, z2: hwFloat) b : boolean;
    53 operator > (const z1, z2: hwFloat) b : boolean;
    54 operator > (const z1, z2: hwFloat) b : boolean;
    54 
    55 
    55 function cstr(const z: hwFloat): shortstring;
    56 function cstr(const z: hwFloat): shortstring;
    56 function hwRound(const t: hwFloat): LongInt;
    57 function hwRound(const t: hwFloat): LongInt;
    57 function hwAbs(const t: hwFloat): hwFloat;
    58 function hwAbs(const t: hwFloat): hwFloat;
    58 function hwSqr(const t: hwFloat): hwFloat;
    59 function hwSqr(const t: hwFloat): hwFloat; inline;
    59 function hwSqrt(const t: hwFloat): hwFloat;
    60 function hwSqrt(const t: hwFloat): hwFloat; inline;
    60 function Distance(const dx, dy: hwFloat): hwFloat;
    61 function Distance(const dx, dy: hwFloat): hwFloat;
    61 function DistanceI(const dx, dy: LongInt): hwFloat;
    62 function DistanceI(const dx, dy: LongInt): hwFloat;
    62 function AngleSin(const Angle: Longword): hwFloat;
    63 function AngleSin(const Angle: Longword): hwFloat;
    63 function AngleCos(const Angle: Longword): hwFloat;
    64 function AngleCos(const Angle: Longword): hwFloat;
    64 function SignAs(const num, signum: hwFloat): hwFloat;
    65 function SignAs(const num, signum: hwFloat): hwFloat;
   147 {$ENDIF}
   148 {$ENDIF}
   148 
   149 
   149 implementation
   150 implementation
   150 uses uMisc;
   151 uses uMisc;
   151 
   152 
       
   153 
   152 {$IFDEF FPC}
   154 {$IFDEF FPC}
   153 
   155 
   154 function int2hwFloat (const i: LongInt) : hwFloat;
   156 function int2hwFloat (const i: LongInt) : hwFloat;
   155 begin
   157 begin
   156 int2hwFloat.isNegative:= i < 0;
   158 int2hwFloat.isNegative:= i < 0;