Bug ... in Erlang

Raimo Niskanen raimo.niskanen@REDACTED
Wed Jun 18 14:19:00 CEST 2003


These bug will be fixed in R9C:



There was bug with list_to_float/1 returning weird floats on some 
Linuxes and on (all) Windowses.

1> erlang:display(list_to_float("1.0e309")). % Linux
inf
true

1> erlang:display(list_to_float("1.0e309")). % Windows
1.#INF000e+000
true
2> list_to_float("1.0e309").
1.00000e+0

Here "inf" and "1.#INF000e+000" are infinity floats (that should not 
exist in Erlang). You can try to assign them to a variable and 
performing tests on them. For example list_to_float("1.0e309") > 1.0e308 
-> true. But printing with io:format/2 (as the shell does) crashes on 
Linux and prints 1.00000e+0 on Windows.

So, list_to_float/1 has been rewritten to use strtod() (previously 
atof() on Unixish systems and sscanf("%lf",..) on Windows) and check 
errors on all platforms. Hopefully no more malicious floats.



There was a problem when the shell crashed, which it seldom does. It did 
when printing infinity floats on Linux. You could type ^G to get to the 
job handler menu and there start a new shell, but not many knew that.

So, the shell handling has been rewritten to automatically start a new 
shell if it crashes.



For snapshot builders and for us internally there was a problem with the 
new erl_scan:

1> 1.0e309.
** 1: illegal float **
2> .
** 1: syntax error before: '.' **

The new scanner left unscanned data on the input stream after a scan 
error. Therefore the second '.' command.

So, the new erl_scan has been rewritten to always scan to full stop 
('.') while recording errors, and finally check if there were any.

Note that you can still do (as before):

1> a. b.
a
2> b.
b



/ Raimo Niskanen, Erlang/OTP, Ericsson AB



Joe Armstrong wrote:
> 
>  Try typing the following:
> 
> 	> 1.0e309.
> 
>  Is this a bug?
> 
>  /Joe
> 




More information about the erlang-questions mailing list