From: Yusuke Endoh Date: 2010-07-13T23:59:45+09:00 Subject: [ruby-core:31256] [Bug #3563][Assigned] problems with exponentiation, cbrt Issue #3563 has been updated by Yusuke Endoh. Status changed from Open to Assigned Assigned to set to Yusuke Endoh Hi, 2010/7/13 Kevin Olbrich : >> (-27)**(Rational(1,3)) #=> (1.5000000000000004+2.598076211353316i) > > I would expect that this would return -3 I think this is not a bug. 1.9.1 and 1.9.2 should be changed. But I understand your expectation. To change this behavior in the future, I propose to add a note to rdoc of Rational#**: diff --git a/rational.c b/rational.c index f5a6d26..734131b 100644 --- a/rational.c +++ b/rational.c @@ -907,6 +907,9 @@ nurat_fdiv(VALUE self, VALUE other) * * Performs exponentiation. * + * When the solution is underspecified, it is not specified which + * solution this method returns. + * * For example: * * Rational(2) ** Rational(3) #=> (8/1) > Also note that if you do this... > >> require 'complex' >> Math.cbrt(-27) #=> (1.5000000000000004+2.598076211353316i) complex.rb is deprecated, but mathn.rb causes the same. I think this is a bug of cmath: diff --git a/lib/cmath.rb b/lib/cmath.rb index b23dac2..976f269 100644 --- a/lib/cmath.rb +++ b/lib/cmath.rb @@ -85,7 +85,7 @@ module CMath end def cbrt(z) - if z.real? and z >= 0 + if z.real? cbrt!(z) else Complex(z) ** (1.0/3) Unless there is objection, I'll commit these patches to both trunk and ruby_1_9_2. -- Yusuke Endoh ---------------------------------------- http://redmine.ruby-lang.org/issues/show/3563 ---------------------------------------- http://redmine.ruby-lang.org