* fix fpc_frac_real to properly thrown an exception on +/-Inf/NaN

This commit is contained in:
florian 2024-10-25 23:10:23 +02:00
parent 03689044d9
commit 201d38d6fe

View File

@ -1757,15 +1757,24 @@ end;
{$ifndef FPC_SYSTEM_HAS_FRAC}
{$push}
{ if we have to check manually fpu exceptions, then force the result assignment statement here to
throw one }
{$CHECKFPUEXCEPTIONS+}
{ turn off fastmath as it converts (d-d)/zero into 0 and thus not raising an exception }
{$OPTIMIZATION NOFASTMATH}
function fpc_frac_real(d : ValReal) : ValReal;compilerproc;
const
zero: ValReal = 0.0;
begin
{ Nan or +/-Inf }
if (float64high(d) and $7ff00000)=$7ff00000 then
{ return NaN }
result := (d-d)/0.0
result := zero/zero
else
result := d - Int(d);
end;
{$pop}
{$endif}