NaN, Zero, & Infinities
Methods of the Month from Ruby’s FloatKevin Munc - @muncman
Monday, September 19, 2011
Numbers. Non-Numbers.
Monday, September 19, 2011
nan?
• True if the float is not a valid IEEE 754 floating point number.
• 0.0.nan? => false
• (0.0/0).nan? => true
• Float::NAN
Monday, September 19, 2011
nan?
• 0.0/0 => NaN
• This is in contrast to the ZeroDivisionError that results when using Fixnums to divide by zero.
Monday, September 19, 2011
Monday, September 19, 2011
Zero is worth something
Monday, September 19, 2011
zero?
• Only true for 0.0 or -0.0
• 0.0.zero? => true
• -0.0.zero? => true
• 0.0001.zero? => false
Monday, September 19, 2011
Tangent::Trivia“The centre of York station was used as the zero point for distance measurement for much of the rail network in the North East of England.” - http://www.flickr.com/photos/xerones/3887271255/
1. Longlands Loop (Northallerton)2. Market Weighton & Beverley3. Micklefield Branch4. Raskelf Curve5. Sherburn Branch6. York & Harrogate7. York & Market Weighton8. York & Newcastle9. York & North Midland10. York & Scarborough
The lines, from the top:
Monday, September 19, 2011
infinite? finite?
Monday, September 19, 2011
finite?• True if the float is a valid IEEE floating point
number; true if not Infinity and not NaN.
• 1.0.finite? => true
• 0.0.finite? => true
• (0.0/0).finite? => false (NaN)
• (1.0/0).finite? => false (Infinity)
Monday, September 19, 2011
Infinity is a little weird
Monday, September 19, 2011
infinite?
• Returns nil if float is finite
• Returns nil if float is NaN
• Returns -1 if float is -infinity
• Returns +1 if float is +infinity
Monday, September 19, 2011
infinite?
• (0.0).infinite? => nil (finite)
• (0.0/0).infinite? => nil (NaN)
• (1.0/0).infinite? => 1
• (-1.0/0).infinite? => -1
Monday, September 19, 2011
infinite?
• (1.0/0) => Infinity
• (-1.0/0) => -Infinity
• Float::INFINITY
Monday, September 19, 2011
infinite?
• Float::INFINITY + 100 => Infinity
• Float::INFINITY - 100 => Infinity
• Float::INFINITY * Float::INFINITY => Infinity
• Float::INFINITY == Float::INFINITY => true
Monday, September 19, 2011
infinite?
• Float::INFINITY == (1.0/0) => true
• Float::INFINITY == (-1.0/0) => false
• Float::INFINITY - Float::INFINITY => NaN
Monday, September 19, 2011
Uses for Infinity?• Range?
• everything = -Infinity..Infinity
• Versus Float::MAX ?
• To represent something completely unbounded?
• Others?
Monday, September 19, 2011
• http://www.flickr.com/photos/shanedk/3959630757/
• http://www.flickr.com/photos/cogdog/3160739508/
• http://www.flickr.com/photos/shyald/3182510815/
• http://www.flickr.com/photos/affers/3183414031/
• http://www.flickr.com/photos/doug88888/4542924531/
• http://www.flickr.com/photos/libraryman/12835119/
• http://www.flickr.com/photos/xerones/3887271255/
• http://www.flickr.com/photos/jcolman/334602926/
Photo Credits
questions.zero?
Monday, September 19, 2011