[fpc-devel] Re: fpc-devel Digest, Vol 99, Issue 3

Max Nazhalov stein_nospam at mail.ru
Thu Jul 5 13:48:24 CEST 2012

On Tue Jul 3 17:46:58 CEST 2012 Marcel M?rtens wrote:

> Hello,
> i think i've found a bug in the procedure TryStrtoFloat.
> To get this bug, create a new project and run this lines (i'm using a
> button to run the line, but it shouldn't matter)

> ---------------------------------------------------
> var
>    areal:real;
> begin
> TryStrtoFloat('86E6722INVALID!',areal);
> end;
> ---------------------------------------------------

> "86E6722" is a valid number, which is out of range and creates an error.
> The whole text is not a valid number, but it also creates an error.
> It raises an "External: SIGFPE" error.

> B.t.w.:  "TryStrToInt('86E6722INVALID!',aint);"  or
> "TryStrToInt('86E6722',aint);" raises no error, they just return false.

Confirmed. r21354, Win32.

EOverflow: Floating point overflow
  $00404BF1  fpc_val_real_shortstr,  line 1484 of C:/prog/FPC_SRC/rtl/inc/sstrings.inc

Quick investigation showed the following:

source line #1484: fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*hd
here: "fpc_Val_Real_ShortStr" is 8.6000000000000000E+4931, and "hd" is 1.00000000000000000E+1792

Surely, You should file this case to Mantis.

BTW, reverting r20705 ("{ Calculate Exponent }" section) fixes the problem on x86, but possibly introduces problems on other platforms (see r20705 description)..

Alternate way is to mask overflow exception within fpc_Val_Real_ShortStr, I suspect.

Best regards,

More information about the fpc-devel mailing list