Backport #3550
closedFloating Point Representation Prevents Raising to Fractional Power
Description
=begin
Not sure why this literal float can be raised successfully to a fractional power, but when assigned to a variable, it returns NaN.
$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ irb
-2.21792114695341 ** 0.1
=> -1.08291560040828
-2.21792114695341 ** 1.1
=> -2.40182141051126
a = -2.21792114695341
=> -2.21792114695341
a ** 0.1
=> NaN # Expected: -1.08291560040828
a ** 1.1
=> NaN # Expected: -2.40182141051126
-2.21792114695341.to_f ** 1.1
=> NaN # Expected: -1.08291560040828
-2.21792114695341.to_f ** 0.1
=> NaN # Expected: -2.40182141051126
a - -2.21792114695341
=> 0.0
(a - -2.21792114695341).zero?
=> true
=end
Updated by Eregon (Benoit Daloze) about 14 years ago
=begin
On 8 July 2010 10:32, Milind Pandit redmine@ruby-lang.org wrote:
Backport #3550: Floating Point Representation Prevents Raising to Fractional Power
http://redmine.ruby-lang.org/issues/show/3550Author: Milind Pandit
Status: Open, Priority: NormalNot sure why this literal float can be raised successfully to a fractional power, but when assigned to a variable, it returns NaN.
$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ irb
-2.21792114695341 ** 0.1
=> -1.08291560040828-2.21792114695341 ** 1.1
=> -2.40182141051126
a = -2.21792114695341
=> -2.21792114695341
a ** 0.1
=> NaN # Expected: -1.08291560040828
a ** 1.1
=> NaN # Expected: -2.40182141051126
-2.21792114695341.to_f ** 1.1
=> NaN # Expected: -1.08291560040828
-2.21792114695341.to_f ** 0.1
=> NaN # Expected: -2.40182141051126
a - -2.21792114695341
=> 0.0
(a - -2.21792114695341).zero?
=> true
Because the answer is complex, and when you use both literal, the
precedence of #** is higher than #-@
(-2.21792114695341) ** 1.1
=> NaN
But
-2.21792114695341 ** 1.1
=> -2.40182141051126
In 1.9, Complex are in the core and so:
(-2.21792114695341) ** 1.1
=> (-2.2842679034439537-0.742203633301588i)
I believe it is possible in 1.8, but "require 'complex'" did not
resolve this for me.
=end
Updated by jeremyevans0 (Jeremy Evans) about 5 years ago
- Tracker changed from Bug to Backport
- Project changed from Ruby 1.8 to Backport187
- Description updated (diff)
- Status changed from Open to Closed