* Infinite loop for infinite value problem fixed

This commit is contained in:
pierre 1999-11-28 23:57:23 +00:00
parent 377e19128d
commit c1f893a1d1

View File

@ -24,6 +24,43 @@ const
i2 : longint = 2;
i1 : longint = 1;
{ we can use this conditional if the Inf const is defined
in processor specific code PM }
{$ifdef FPC_HAS_INFINITY_CONST}
{$define FPC_INFINITY_FOR_REAL2STR}
{$else not FPC_HAS_INFINITY_CONST}
{ To avoid problems with infinity just
issue it in byte representation to be endianness independant PM }
{$ifndef FPC_INFINITY_FOR_REAL2STR}
{$ifdef SUPPORT_EXTENDED}
{ extended is not IEEE so its processor specific
so I only allow it for i386 PM }
{$ifdef i386}
{$define FPC_INFINITY_FOR_REAL2STR}
InfArray : {extended} array[0..9] of byte = ($0,$0,$0,$0,$0,$0,$0,$80,$ff,$7f);
{$endif i386}
{$endif SUPPORT_EXTENDED}
{$endif not FPC_INFINITY_FOR_REAL2STR}
{$ifndef FPC_INFINITY_FOR_REAL2STR}
{$ifdef SUPPORT_DOUBLE}
{$define FPC_INFINITY_FOR_REAL2STR}
InfArray : {double} array[0..9] of byte = ($0,$0,$0,$0,$0,$0,$f0,$7f);
{$endif SUPPORT_DOUBLE}
{$endif not FPC_INFINITY_FOR_REAL2STR}
{$ifndef FPC_INFINITY_FOR_REAL2STR}
{$ifdef SUPPORT_SINGLE}
{$define FPC_INFINITY_FOR_REAL2STR}
InfArray : {single} array[0..3] of byte = ($0,$0,$80,$7f);
{$endif SUPPORT_SINGLE}
{$endif not FPC_INFINITY_FOR_REAL2STR}
{$ifndef FPC_INFINITY_FOR_REAL2STR}
{$warning don't know Infinity values }
{$endif not FPC_INFINITY_FOR_REAL2STR}
{$endif not FPC_HAS_INFINITY_CONST}
Procedure str_real (len,f : longint; d : ValReal; real_type :treal_type; var s : string);
{
These numbers are for the double type...
@ -103,6 +140,21 @@ begin
{ for the same reason I converted d:=frac(d) to d:=d-int(d); (PM) }
if sign then
d:=-d;
{$ifdef FPC_INFINITY_FOR_REAL2STR}
{$ifndef FPC_HAS_INFINITY_CONST}
if d=ValReal(InfArray) then
{$else FPC_HAS_INFINITY_CONST}
if d=Inf then
{$endif FPC_HAS_INFINITY_CONST}
begin
if sign then
s:='-Inf'
else
s:='Inf';
exit;
end;
{$endif FPC_INFINITY_FOR_REAL2STR}
{ determine precision : maximal precision is : }
currprec:=maxlen-explen-3;
{ this is also the maximal number of decimals !!}
@ -234,7 +286,10 @@ end;
{
$Log$
Revision 1.17 1999-11-03 09:54:24 peter
Revision 1.18 1999-11-28 23:57:23 pierre
* Infinite loop for infinite value problem fixed
Revision 1.17 1999/11/03 09:54:24 peter
* another fix for precision
Revision 1.16 1999/11/03 00:55:09 pierre