hedgewars/uFloat.pas
changeset 2599 c7153d2348f3
parent 2587 0dfa56a8513c
child 2630 079ef82eac75
equal deleted inserted replaced
2598:e118329666ff 2599:c7153d2348f3
    17  *)
    17  *)
    18 
    18 
    19 unit uFloat;
    19 unit uFloat;
    20 interface
    20 interface
    21 
    21 
    22 {$INCLUDE options.inc}
    22 {$INCLUDE "options.inc"}
    23 
    23 
    24 {$IFDEF FPC}
    24 {$IFDEF FPC}
    25 {$ifdef FPC_LITTLE_ENDIAN}
    25 {$IFDEF ENDIAN_LITTLE}
    26 type hwFloat = record
    26 type hwFloat = record
    27                isNegative: boolean;
    27                isNegative: boolean;
    28                case byte of
    28                case byte of
    29                0: (Frac, Round: Longword);
    29                0: (Frac, Round: Longword);
    30                1: (QWordValue : QWord);
    30                1: (QWordValue : QWord);
    31                end;
    31                end;
    32 {$else}
    32 {$ELSE}
    33 type hwFloat = record
    33 type hwFloat = record
    34                isNegative: boolean;
    34                isNegative: boolean;
    35                case byte of
    35                case byte of
    36                0: (Round, Frac: Longword);
    36                0: (Round, Frac: Longword);
    37                1: (QWordValue : QWord);
    37                1: (QWordValue : QWord);
    38                end;
    38                end;
    39 {$endif}
    39 {$ENDIF}
    40 
    40 
    41 function int2hwFloat (const i: LongInt) : hwFloat;
    41 function int2hwFloat (const i: LongInt) : hwFloat;
    42 
    42 
    43 operator + (const z1, z2: hwFloat) z : hwFloat;
    43 operator + (const z1, z2: hwFloat) z : hwFloat;
    44 operator - (const z1, z2: hwFloat) z : hwFloat;
    44 operator - (const z1, z2: hwFloat) z : hwFloat;
    61 function DistanceI(const dx, dy: LongInt): hwFloat;
    61 function DistanceI(const dx, dy: LongInt): hwFloat;
    62 function AngleSin(const Angle: Longword): hwFloat;
    62 function AngleSin(const Angle: Longword): hwFloat;
    63 function AngleCos(const Angle: Longword): hwFloat;
    63 function AngleCos(const Angle: Longword): hwFloat;
    64 function SignAs(const num, signum: hwFloat): hwFloat;
    64 function SignAs(const num, signum: hwFloat): hwFloat;
    65 
    65 
       
    66 {$IFDEF FPC}
    66 {$J-}
    67 {$J-}
       
    68 {$ENDIF}
    67 {$WARNINGS OFF}
    69 {$WARNINGS OFF}
    68 const  _1div1024: hwFloat = (isNegative: false; QWordValue:     4194304);
    70 const  _1div1024: hwFloat = (isNegative: false; QWordValue:     4194304);
    69       _1div10000: hwFloat = (isNegative: false; QWordValue:      429496);
    71       _1div10000: hwFloat = (isNegative: false; QWordValue:      429496);
    70       _1div50000: hwFloat = (isNegative: false; QWordValue:       85899);
    72       _1div50000: hwFloat = (isNegative: false; QWordValue:       85899);
    71      _1div100000: hwFloat = (isNegative: false; QWordValue:       42950);
    73      _1div100000: hwFloat = (isNegative: false; QWordValue:       42950);
   331 begin
   333 begin
   332 SignAs.QWordValue:= num.QWordValue;
   334 SignAs.QWordValue:= num.QWordValue;
   333 SignAs.isNegative:= signum.isNegative
   335 SignAs.isNegative:= signum.isNegative
   334 end;
   336 end;
   335 
   337 
   336 {$INCLUDE SinTable.inc}
   338 {$INCLUDE "SinTable.inc"}
   337 
   339 
   338 function AngleSin(const Angle: Longword): hwFloat;
   340 function AngleSin(const Angle: Longword): hwFloat;
   339 begin
   341 begin
   340 {$IFDEF DEBUGFILE}
   342 {$IFDEF DEBUGFILE}
   341 TryDo((Angle >= 0) and (Angle <= 2048), 'Sin param exceeds limits', true);
   343 TryDo((Angle >= 0) and (Angle <= 2048), 'Sin param exceeds limits', true);