From: Yukihiro Matsumoto Date: 2010-08-10T22:52:30+09:00 Subject: [ruby-dev:41977] Re: [ruby-cvs:36157] Ruby:r28955 (trunk): * complex.c (nucomp_to_[ifr]): don't allow complex with in-exact まつもと ゆきひろです In message "Re: [ruby-dev:41975] Re: [ruby-cvs:36157] Ruby:r28955 (trunk): * complex.c (nucomp_to_[ifr]): don't allow complex with in-exact" on Tue, 10 Aug 2010 22:16:30 +0900, Tadayoshi Funaba writes: |元々 mathn のような環境になった場合、変換するまでもなく虚部がなくなって |いる (実装的に) はずのものは変換できるようにしておこうとだけのもだった |ので。 | |で、虚部が浮動小数点数のときは変換しないようにしてあったので元に戻した |だけです。この振舞いは Common Lisp や Scheme なんかを参考にしました。零 |といっても、-0.0 もあるので、CMath.sqrt(Complex(-4.0,-0.0)) のような場 |合にただの -4.0 とは違いがはっきり出てしまいます。 なるほど。動機は分かりました。ただ、今回の変更はいずれも明示 的な変換に関るもので、「虚数部がゼロになったら自動的に実数に 変換する」というわけではないので、sqrtなどの心配は不要だと思 います。 |to_i などでどうすべきかは議論があると思いますが、僕はそういう考えで |mathn 的な環境に移行した後でも冗長になるだけで問題は少なそうだと特別に |許していただけでしたが、とくに議論もなく修正されたものを元に戻しただけ |です。 mathnは正直使い物にならないので考慮の必要はないと思います。 将来、セレクターネームスペースなり、クラスボックスなり で影響範囲を限定できたとしてもかなり使いどころに困ります。 # Ruby 2.0ではmathnは削除しようと思う。 あるいは、ここでいう「mathn的な環境」というのは、1/2 => が Rational(1,2)になる環境という意味ともとれますが、仮に、いつに なるかわからない未来のRubyでそのような状況になったとして、そ こで「変換するまでもなく虚部がなくなっている」ということが起 きるのかどうかよくわかりませんでした。たぶん、私がふなばさん のお言葉をよく理解していないんだと思うんですが。 |今のところ、僕は再度修正するつもりがないですが、やはり修正したいという |ことであれば、議論をするなり、勝手に修正するなり御自由にしてください。 他の方のご意見をお聞きしたいところです。私は、虚数部がゼロで あれば実数への変更を許す方が望ましいと思っていて、その理由も 正当であるとまだ思っているので、新たな反論が出なければ将来ま た同様の変更を行おうと思います。 まつもと ゆきひろ /:|)