* ensure always an exception is raised in genmath.inc if appropriate

This commit is contained in:
florian 2024-12-05 22:17:18 +01:00
parent 072f1bfb29
commit f72183eb37

View File

@ -989,7 +989,7 @@ end;
if( d <= 0.0 ) then if( d <= 0.0 ) then
begin begin
if d < 0.0 then if d < 0.0 then
result:=(d-d)/zero result:=zero/zero
else else
result := 0.0; result := 0.0;
end end
@ -1439,7 +1439,7 @@ end;
{ if we have to check manually fpu exceptions, then force the exit statements here to { if we have to check manually fpu exceptions, then force the exit statements here to
throw one } throw one }
{$CHECKFPUEXCEPTIONS+} {$CHECKFPUEXCEPTIONS+}
{ turn off fastmath as it converts (d-d)/zero into 0 and thus not raising an exception } { turn off fastmath as it converts zero/zero into 1 and thus not raising an exception }
{$OPTIMIZATION NOFASTMATH} {$OPTIMIZATION NOFASTMATH}
begin begin
hx := float64high(d); hx := float64high(d);
@ -1451,7 +1451,7 @@ end;
if (((hx and $7fffffff) or longint(lx))=0) then if (((hx and $7fffffff) or longint(lx))=0) then
exit(-two54/zero); { log(+-0)=-inf } exit(-two54/zero); { log(+-0)=-inf }
if (hx<0) then if (hx<0) then
exit((d-d)/zero); { log(-#) = NaN } exit(zero/zero); { log(-#) = NaN }
dec(k, 54); d := d * two54; { subnormal number, scale up x } dec(k, 54); d := d * two54; { subnormal number, scale up x }
hx := float64high(d); hx := float64high(d);
end; end;
@ -1762,7 +1762,7 @@ end;
{ if we have to check manually fpu exceptions, then force the result assignment statement here to { if we have to check manually fpu exceptions, then force the result assignment statement here to
throw one } throw one }
{$CHECKFPUEXCEPTIONS+} {$CHECKFPUEXCEPTIONS+}
{ turn off fastmath as it converts (d-d)/zero into 0 and thus not raising an exception } { turn off fastmath as it converts zero/zero into 0 and thus not raising an exception }
{$OPTIMIZATION NOFASTMATH} {$OPTIMIZATION NOFASTMATH}
{$endif VER3_2} {$endif VER3_2}
function fpc_frac_real(d : ValReal) : ValReal;compilerproc; function fpc_frac_real(d : ValReal) : ValReal;compilerproc;