Forum: Ruby-core Issues with Math and Complex behavior on 1.9

Posted by mrkn (Kenta Murata) (Guest)
on 2013-02-17 07:42
(Received via mailing list)
Issue #2756 has been updated by mrkn (Kenta Murata).

Target version changed from 2.0.0 to next minor


----------------------------------------
Bug #2756: Issues with Math and Complex behavior on 1.9
https://bugs.ruby-lang.org/issues/2756#change-36408

Author: brixen (Brian Ford)
Status: Assigned
Priority: Normal
Assignee: mrkn (Kenta Murata)
Category:
Target version: next minor
ruby -v: ruby 1.9.2dev (2010-02-18 trunk 26704) [i386-darwin9.8.0]


=begin
 This ticket aggregates several issues with Math methods on 1.9. There 
are related tickets that either have not yet or do not, in my opinion, 
resolve these issues in a satisfactory manner. (see 
http://redmine.ruby-lang.org/issues/show/1708, and related to the 
behavior of Math http://redmine.ruby-lang.org/issues/show/2189 and to 
1.8 behavior http://redmine.ruby-lang.org/issues/show/2754)

 1. There are behaviors that are inconsistent with 1.8

 # On 1.8, the argument is coerced
 $ ruby1.8.7 -v -e 'o = Object.new; def o.to_f; 0.5; end; p 
Math.atanh(o)'ruby 1.8.7 (2009-12-24 patchlevel 248) [i686-darwin9.8.0]
 0.549306144334055

 # On 1.9, the argement is not coerced
 $ ruby1.9 -v -e 'o = Object.new; def o.to_f; 0.5; end; p Math.atanh(o)'
 ruby 1.9.2dev (2010-02-18 trunk 26704) [i386-darwin9.8.0]
 -e:1:in `atanh': can't convert Object into Float (TypeError)
         from -e:1:in `<main>'

 Q. Should 1.9 coerce arguments to Math methods?

 # On 1.8, an ArgmentError is raised
 $ ruby1.8.7 -v -e 'p Math.atanh("str")'
 ruby 1.8.7 (2009-12-24 patchlevel 248) [i686-darwin9.8.0]
 -e:1:in `atanh': invalid value for Float(): "str" (ArgumentError)
         from -e:1

 # On 1.9, a TypeError is raised
 $ ruby1.9 -v -e 'p Math.atanh("str")'
 ruby 1.9.2dev (2010-02-18 trunk 26704) [i386-darwin9.8.0]
 -e:1:in `atanh': can't convert String into Float (TypeError)
         from -e:1:in `<main>'

 Q. In this case, TypeError would appear more correct, so can the 1.8.7 
behavior be changed? Also note that changing the 1.8.7 behavior would 
make it consistent with the behavior of atanh when requiring Complex 
(see http://redmine.ruby-lang.org/issues/show/2754)

 2. There are behaviors that are inconsistent when requiring 
lib/complex.rb

 # The original method raise a TypeError
 $ ruby1.9 -v -e 'p Math.atanh(nil)'
 ruby 1.9.2dev (2010-02-18 trunk 26704) [i386-darwin9.8.0]
 -e:1:in `atanh': can't convert nil into Float (TypeError)
         from -e:1:in `<main>'

 # The new method attempts an undefined operation and consequently 
raises a NoMethodError
 $ ruby1.9 -v -rcomplex -e 'p Math.atanh(nil)'
 ruby 1.9.2dev (2010-02-18 trunk 26704) [i386-darwin9.8.0]
 lib/complex.rb is deprecated
 /Users/brian/devel/ruby19/install/lib/ruby/1.9.1/cmath.rb:196:in 
`atanh': undefined method `real?' for nil:NilClass (NoMethodError)
         from -e:1:in `<main>'

 The same behavior is observed when passing a String.

 Q. Should the behavior of atanh after requiring lib/complex.rb be the 
same for non-Complex inputs as before?

 Also, requiring lib/complex.rb on 1.9 causes a warning: "lib/complex.rb 
is deprecated". But this is not entirely true. As best as I can 
understand from http://redmine.ruby-lang.org/issues/show/1708, it was 
never decided whether complex.rb should require cmath.rb. It appears 
that there are some behaviors acquired via lib/complex.rb that are not 
deprecated. In that case, this warning is confusing and misleading.

 Q. Is lib/complex.rb deprecated or not? If it is, why is it deprecated 
and not removed? 1.9 already removes many libraries. Why is this one 
special and allowed to cause such confusion?

 Q. Is there a definitive document that explains the policy and behavior 
of Math and Complex in 1.9?


 To summarize the questions in this ticket?

 Q. Should 1.9 coerce arguments to Math methods?
 Q. Can we change the 1.8.7 behavior when raising exceptions to be both 
internally consistent and consistent with the behavior of 1.9 (Note that 
numerous changes to the exception raised have already been made in 1.8.5 
-> 1.8.6 -> 1.8.7, so this request is not without precedent.) (see 
http://redmine.ruby-lang.org/issues/show/2754)
 Q. Should the behavior of atanh after requiring lib/complex.rb be the 
same for non-Complex inputs as before?
 Q. Is lib/complex.rb deprecated or not? If it is, *why* is it 
deprecated and not removed?
 Q. Is there a definitive document that explains the policy and behavior 
of Math and Complex in 1.9?

 Thanks,
 Brian
=end
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.