on master help sign in
Switch isFinite to isInfinite and improve documentation
ef19d71Evan Czaplicki
libraries/Basics.elm+22−9
@@ -30,9 +30,6 @@ are your tuples so big?
30# Number Conversions
30# Number Conversions
31@docs round, floor, ceiling, truncate, toFloat
31@docs round, floor, ceiling, truncate, toFloat
32
32
33−# Floating Point Checks
34−@docs isNaN, isFinite
35−
36# Angle Conversions
33# Angle Conversions
37All angle conversions result in “standard Elm angles”
34All angle conversions result in “standard Elm angles”
38which happen to be radians.
35which happen to be radians.
@@ -42,6 +39,9 @@ which happen to be radians.
42# Polar Coordinates
39# Polar Coordinates
43@docs toPolar, fromPolar
40@docs toPolar, fromPolar
44
41
42+# Floating Point Checks
43+@docs isNaN, isInfinite
44+
45# Tuples
45# Tuples
46@docs fst, snd
46@docs fst, snd
47
47
@@ -274,17 +274,30 @@ ceiling = Native.Basics.ceiling
274toFloat : Int -> Float
274toFloat : Int -> Float
275toFloat = Native.Basics.toFloat
275toFloat = Native.Basics.toFloat
276
276
277−{- | Determines whether a float is an undefined or unrepresentable number,
277+{- | Determines whether a float is an undefined or unrepresentable number.
278−such as 0/0. NaN stands for *not a number*.
278+NaN stands for *not a number* and it is [a standardized part of floating point
279+numbers](http://en.wikipedia.org/wiki/NaN).
280+
281+ isNaN (0/0) == True
282+ isNaN (sqrt -1) == True
283+ isNaN (1/0) == False -- infinity is a number
284+ isNaN 1 == False
279-}
285-}
280isNaN : Float -> Bool
286isNaN : Float -> Bool
281isNaN = Native.Basics.isNaN
287isNaN = Native.Basics.isNaN
282
288
283−{- | Determines whether a float is finite. Positive and negative infinity are
289+{- | Determines whether a float is positive or negative infinity.
284−valid floating point numbers, created by computations like `1/0` and `-1/0`.
290+
291+ isInfinite (0/0) == False
292+ isInfinite (sqrt -1) == False
293+ isInfinite (1/0) == True
294+ isInfinite 1 == False
295+
296+Notice that NaN is not infinite! For float `n` to be finite implies that
297+`not (isInfinite n || isNaN n)` evaluates to `True`.
285-}
298-}
286−isFinite : Float -> Bool
299+isInfinite : Float -> Bool
287−isFinite = Native.Basics.isFinite
300+isInfinite = Native.Basics.isInfinite
288
301
289-- Function Helpers
302-- Function Helpers
290
303
libraries/Native/Basics.js+2−1
@@ -19,6 +19,7 @@ Elm.Native.Basics.make = function(elm) {
19 return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n; }
19 return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n; }
20 function xor(a,b) { return a !== b; }
20 function xor(a,b) { return a !== b; }
21 function not(b) { return !b; }
21 function not(b) { return !b; }
22+ function isInfinite(n) { return n === Infinity || n === -Infinity }
22
23
23 function truncate(n) { return n|0; }
24 function truncate(n) { return n|0; }
24
25
@@ -54,7 +55,7 @@ Elm.Native.Basics.make = function(elm) {
54 round:Math.round,
55 round:Math.round,
55 toFloat:function(x) { return x; },
56 toFloat:function(x) { return x; },
56 isNaN:isNaN,
57 isNaN:isNaN,
57− isFinite:isFinite
58+ isInfinite:isInfinite
58 };
59 };
59
60
60 return elm.Native.Basics.values = basics;
61 return elm.Native.Basics.values = basics;