Bug ... in Erlang
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
1> erlang:display(list_to_float("1.0e309")). % Windows
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
** 1: illegal float **
** 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.
/ Raimo Niskanen, Erlang/OTP, Ericsson AB
Joe Armstrong wrote:
> Try typing the following:
> > 1.0e309.
> Is this a bug?
More information about the erlang-questions