[erlang-questions] Inf, NaN, and -Inf
Richard O'Keefe
<>
Mon Feb 27 21:47:51 CET 2012
On 28/02/2012, at 6:07 AM, Tom Burdick wrote:
> So in python and C to find the biggest and smallest number in a list
> of floating point numbers I'd do something like a lists:foldl and
> simply give it
>
> inf and -inf respectively as the values to compare against, or better
> yet use some built in defines or variables defining what the min and
> max values for a particular number type are.
That is a VERY BAD way to do it in C or Python.
The maximum or minimum of an empty set of numbers is UNDEFINED.
It also has the exceedingly unpleasant property that
the reported maximum or minimum of a list might not even be an
element of that list!
If you want the maximum or minimum of a list in Erlang,
just use
Max = lists:max(List)
or Min = lists:min(List)
You will find the code in .../stdlib/src/lists.erl
and you will notice that it crashes, just as it should,
if List is empty.
>
> Is there some sane way to do this in erlang? Is there a way to get the
> floating point values inf and -inf in erlang
I haven't found one. Somebody might want to write an EEP recommending
richer access to IEEE arithmetic features. (Is anyone running Erlang
on z/Series?)
> or the maximal and
> minimal values for integers
The Erlang integer 10 is analogous to the Python integer 10L (note the
L suffix). Try 10L**10000 in Python. Now, what is the maximal and
what the minimal integer (of that kind) in Python? Right; the limit
is basically "how much memory do you have?" Same for Erlang.
I guess that means your technique for finding the maximum or minimum
number in a list doesn't actually work for Python either.
By the way, the function you want is not foldl but foldl1:
foldl1(F, [X|Xs]) -> foldl(F, X, Xs).
More information about the erlang-questions
mailing list