From: Simon Strandgaard Date: 2004-02-16T20:04:56+09:00 Subject: Re: Math.sqrt(-1) doesn't raise ArgumentError On Mon, 16 Feb 2004 19:10:37 +0900, Yukihiro Matsumoto wrote: > Hi, > > In message "Math.sqrt(-1) doesn't raise ArgumentError" > on 04/02/16, Simon Strandgaard writes: > > |server> irb > |irb(main):001:0> Math.sqrt(-1) > |=> NaN > |irb(main):002:0> > | > |NaN == Not a Number > | > |Why has sqrt behavier changed, when it hasn't for divisionbyzero? > > Because sqrt is a float operation. > > p 3.0 / 0 > => Infinity > > matz. I want to do an assert_equal in rubicon, like this Version.less_than("1.8.1") do assert_raise(ArgumentError) { Math.sqrt(-1) } end Version.greater_or_equal("1.8.1") do assert_equal(NaN, Math.sqrt(-1)) end However How do I make an Float instance of NaN? irb(main):001:0> Math.sqrt(-1) => NaN irb(main):002:0> v = NaN NameError: uninitialized constant NaN from (irb):2 irb(main):003:0> v = Math::NaN NameError: uninitialized constant Math::NaN from (irb):3 irb(main):004:0> v = Math.NaN NoMethodError: undefined method `NaN' for Math:Module from (irb):4 irb(main):005:0> v = Math.NaN NoMethodError: undefined method `NaN' for Math:Module from (irb):5 irb(main):006:0> v = Math.sqrt(-1) => NaN irb(main):007:0> v.class => Float irb(main):008:0> x = Float::NaN NameError: uninitialized constant Float::NaN from (irb):8 irb(main):009:0> x = Float.NaN NoMethodError: undefined method `NaN' for Float:Class from (irb):9 irb(main):010:0> x = Float.new(NaN) NameError: uninitialized constant NaN from (irb):10 irb(main):011:0> -- Simon Strandgaard