nan, zero, & infinities

18
NaN, Zero, & Infinities Methods of the Month from Ruby’s Float Kevin Munc - @muncman Monday, September 19, 2011

Upload: kevin-munc

Post on 05-Dec-2014

530 views

Category:

Technology


5 download

DESCRIPTION

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

TRANSCRIPT

Page 1: NaN, Zero, & Infinities

NaN, Zero, & Infinities

Methods of the Month from Ruby’s FloatKevin Munc - @muncman

Monday, September 19, 2011

Page 2: NaN, Zero, & Infinities

Numbers. Non-Numbers.

Monday, September 19, 2011

Page 3: NaN, Zero, & Infinities

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

Page 4: NaN, Zero, & Infinities

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

Page 5: NaN, Zero, & Infinities

Monday, September 19, 2011

Page 6: NaN, Zero, & Infinities

Zero is worth something

Monday, September 19, 2011

Page 7: NaN, Zero, & Infinities

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

Page 8: NaN, Zero, & Infinities

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

Page 9: NaN, Zero, & Infinities

infinite? finite?

Monday, September 19, 2011

Page 10: NaN, Zero, & Infinities

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

Page 11: NaN, Zero, & Infinities

Infinity is a little weird

Monday, September 19, 2011

Page 12: NaN, Zero, & Infinities

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

Page 13: NaN, Zero, & Infinities

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

Page 14: NaN, Zero, & Infinities

infinite?

• (1.0/0) => Infinity

• (-1.0/0) => -Infinity

• Float::INFINITY

Monday, September 19, 2011

Page 15: NaN, Zero, & Infinities

infinite?

• Float::INFINITY + 100 => Infinity

• Float::INFINITY - 100 => Infinity

• Float::INFINITY * Float::INFINITY => Infinity

• Float::INFINITY == Float::INFINITY => true

Monday, September 19, 2011

Page 16: NaN, Zero, & Infinities

infinite?

• Float::INFINITY == (1.0/0) => true

• Float::INFINITY == (-1.0/0) => false

• Float::INFINITY - Float::INFINITY => NaN

Monday, September 19, 2011

Page 17: NaN, Zero, & Infinities

Uses for Infinity?• Range?

• everything = -Infinity..Infinity

• Versus Float::MAX ?

• To represent something completely unbounded?

• Others?

Monday, September 19, 2011