syshelpf.inc 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. Class Function TFLOATHELPER.IsNan(const AValue: FLOATTYPE): Boolean; overload; inline; static;
  2. begin
  3. Result:=AValue=Nan;
  4. end;
  5. Class Function TFLOATHELPER.IsInfinity(const AValue: FLOATTYPE): Boolean; overload; inline; static;
  6. begin
  7. Result:=(AValue=PositiveInfinity) or (AValue=NegativeInfinity);
  8. end;
  9. Class Function TFLOATHELPER.IsNegativeInfinity(const AValue: FLOATTYPE): Boolean; overload; inline; static;
  10. begin
  11. Result:=AValue=NegativeInfinity;
  12. end;
  13. Class Function TFLOATHELPER.IsPositiveInfinity(const AValue: FLOATTYPE): Boolean; overload; inline; static;
  14. begin
  15. Result:=(AValue=PositiveInfinity);
  16. end;
  17. Class Function TFLOATHELPER.Parse(const AString: string): FLOATTYPE; overload; inline; static;
  18. begin
  19. Result:=StrToFloat(AString,DefaultFormatSettings);
  20. end;
  21. Class Function TFLOATHELPER.Parse(const AString: string; const AFormatSettings: TFormatSettings): FLOATTYPE; overload; inline; static;
  22. begin
  23. Result:=StrToFloat(AString,AFormatSettings);
  24. end;
  25. Class Function TFLOATHELPER.Size: Integer; inline; static;
  26. begin
  27. Result:=SizeOf(FLOATTYPE);
  28. end;
  29. Class Function TFLOATHELPER.ToString(const AValue: FLOATTYPE): string; overload; inline; static;
  30. begin
  31. Result:=FloatToStr(AValue,DefaultFormatSettings);
  32. end;
  33. Class Function TFLOATHELPER.ToString(const AValue: FLOATTYPE; const AFormatSettings: TFormatSettings): string; overload; inline; static;
  34. begin
  35. Result:=FloatToStr(AValue,AFormatSettings);
  36. end;
  37. Class Function TFLOATHELPER.ToString(const AValue: FLOATTYPE; const AFormat: TFloatFormat; const APrecision, ADigits: Integer): string; overload; inline; static;
  38. begin
  39. Result:=FloatToStrF(AValue,AFormat,APrecision,ADigits,DefaultFormatSettings);
  40. end;
  41. Class Function TFLOATHELPER.ToString(const AValue: FLOATTYPE; const AFormat: TFloatFormat; const APrecision, ADigits: Integer; const AFormatSettings: TFormatSettings): string;
  42. overload; inline; static;
  43. begin
  44. Result:=FloatToStrF(AValue,AFormat,APrecision,ADigits,AFormatSettings);
  45. end;
  46. Class Function TFLOATHELPER.TryParse(const AString: string; out AValue: FLOATTYPE): Boolean; overload; inline; static;
  47. begin
  48. Result:=TryStrToFloat(AString,AValue,DefaultFormatSettings);
  49. end;
  50. Class Function TFLOATHELPER.TryParse(const AString: string; out AValue: FLOATTYPE; const AFormatSettings: TFormatSettings): Boolean; overload; inline;
  51. static;
  52. begin
  53. Result:=TryStrToFloat(AString,AValue,AFormatSettings);
  54. end;
  55. Function TFLOATHELPER.GetB(AIndex: Cardinal): Byte;
  56. begin
  57. if (AIndex>=SizeOf(FLOATTYPE)) then
  58. system.Error(reRangeError);
  59. Result:=PByte(@Self)[AIndex];
  60. end;
  61. Function TFLOATHELPER.GetW(AIndex: Cardinal): Word;
  62. begin
  63. if (AIndex>=(SizeOf(FLOATTYPE) div SizeOf(Word))) then
  64. system.Error(reRangeError);
  65. Result:=PWord(@Self)[AIndex];
  66. end;
  67. Function TFLOATHELPER.GetE: QWord; inline;
  68. begin
  69. Result:=TFloatRec(Self).Exp;
  70. end;
  71. Function TFLOATHELPER.GetF: QWord; inline;
  72. begin
  73. Result:=TFloatRec(Self).Frac;
  74. end;
  75. Function TFLOATHELPER.GetS: Boolean; inline;
  76. begin
  77. Result:=TFloatRec(Self).Sign;
  78. end;
  79. procedure TFLOATHELPER.SetB(AIndex: Cardinal; const AValue: Byte);
  80. begin
  81. if (AIndex>=SizeOf(FLOATTYPE)) then
  82. system.Error(reRangeError);
  83. PByte(@Self)[AIndex]:=AValue;
  84. end;
  85. procedure TFLOATHELPER.SetW(AIndex: Cardinal; const AValue: Word);
  86. begin
  87. if (AIndex>=(SizeOf(FLOATTYPE) div SizeOf(Word))) then
  88. system.Error(reRangeError);
  89. PWord(@Self)[AIndex]:=AValue;
  90. end;
  91. procedure TFLOATHELPER.SetE(AValue: QWord);
  92. begin
  93. TFloatRec(Self).Exp:=AValue;
  94. end;
  95. procedure TFLOATHELPER.SetF(AValue: QWord);
  96. begin
  97. TFloatRec(Self).Frac:=AValue;
  98. end;
  99. procedure TFLOATHELPER.SetS(AValue: Boolean);
  100. begin
  101. TFloatRec(Self).Sign:=AValue;
  102. end;
  103. Procedure TFLOATHELPER.BuildUp(const ASignFlag: Boolean; const AMantissa: QWord; const AExponent: Integer);
  104. begin
  105. Self := 0.0;
  106. SetS(ASignFlag);
  107. SetE(AExponent + $3FF);
  108. SetF(AMantissa and $000FFFFFFFFFFFFF);
  109. end;
  110. Function TFLOATHELPER.Exponent: Integer;
  111. var
  112. F,E : QWord;
  113. begin
  114. Result:=0; // Zero, inf, Nan
  115. E:=GetE;
  116. F:=GetF;
  117. if (0<E) and (E<$77FF) then
  118. Result:=E-$3FF
  119. else if (E=0) and (F<>0) then
  120. Result:=-1022
  121. end;
  122. Function TFLOATHELPER.Fraction: Extended;
  123. begin
  124. Result:=TFloatRec(Self).Fraction;
  125. end;
  126. Function TFLOATHELPER.IsInfinity: Boolean; overload; inline;
  127. begin
  128. Result:=(Self=PositiveInfinity) or (Self=NegativeInfinity);
  129. end;
  130. Function TFLOATHELPER.IsNan: Boolean; overload; inline;
  131. begin
  132. Result:=(Self=Nan);
  133. end;
  134. Function TFLOATHELPER.IsNegativeInfinity: Boolean; overload; inline;
  135. begin
  136. Result:=(Self=NegativeInfinity);
  137. end;
  138. Function TFLOATHELPER.IsPositiveInfinity: Boolean; overload; inline;
  139. begin
  140. Result:=(Self=PositiveInfinity);
  141. end;
  142. Function TFLOATHELPER.Mantissa: QWord;
  143. begin
  144. Result:=TFLoatRec(Self).Mantissa;
  145. end;
  146. Function TFLOATHELPER.SpecialType: TFloatSpecial;
  147. begin
  148. Result:=TFLoatRec(Self).SpecialType;
  149. end;
  150. Function TFLOATHELPER.ToString(const AFormat: TFloatFormat; const APrecision, ADigits: Integer): string; overload; inline;
  151. begin
  152. Result:=FloatToStrF(Self,AFormat,APrecision,ADigits,DefaultFormatSettings);
  153. end;
  154. Function TFLOATHELPER.ToString(const AFormat: TFloatFormat; const APrecision, ADigits: Integer; const AFormatSettings: TFormatSettings): string; overload; inline;
  155. begin
  156. Result:=FloatToStrF(Self,AFormat,APrecision,ADigits,AFormatSettings);
  157. end;
  158. Function TFLOATHELPER.ToString(const AFormatSettings: TFormatSettings): string; overload; inline;
  159. begin
  160. Result:=FloatToStr(Self,AFormatSettings);
  161. end;
  162. Function TFLOATHELPER.ToString: string; overload; inline;
  163. begin
  164. Result:=FloatToStr(Self,DefaultFormatSettings);
  165. end;