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

NaN, Zero, & Infinities

Dec 05, 2014

Download

Technology

Kevin Munc

My Method of the Month lightning talk for the Columbus Ruby Brigade's September 2011 meeting.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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