NaN, Zero, & Infinities

Post on 05-Dec-2014

530 views 5 download

description

My Method of the Month lightning talk for the Columbus Ruby Brigade's September 2011 meeting.

Transcript of NaN, Zero, & Infinities

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