Feature #4878

CMath に frexp, ldexp, hypot の3関数は不要ではないか

Added by Kenta Murata about 4 years ago. Updated over 3 years ago.

[ruby-dev:43787]
Status:Rejected
Priority:Normal
Assignee:Yukihiro Matsumoto

Description

現在 CMath は、Math を include して各関数を再定義することで実装されています。
このやり方では、複素数向けの関数としては定義できない frexp, ldexp, hypot の3関数も同時に include されてしまいます。
これらは Math の関数として定義されていれば良いだけですので、CMath からの削除を提案します。

History

#1 Updated by Yukihiro Matsumoto about 4 years ago

まつもと ゆきひろです

In message "Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Mon, 13 Jun 2011 23:16:37 +0900, Kenta Murata muraken@gmail.com writes:

|Issue #4878 has been reported by Kenta Murata.
|
|----------------------------------------
|Feature #4878: CMath に frexp, ldexp, hypot の3関数は不要ではないか
|http://redmine.ruby-lang.org/issues/4878

|現在 CMath は、Math を include して各関数を再定義することで実装されています。
|このやり方では、複素数向けの関数としては定義できない frexp, ldexp, hypot の3関数も同時に include されてしまいます。
|これらは Math の関数として定義されていれば良いだけですので、CMath からの削除を提案します。

なるほど。同意します。削除のタイミングはメンテナにお任せします。

#2 Updated by Yukihiro Matsumoto about 4 years ago

まつもと ゆきひろです

In message "Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Mon, 13 Jun 2011 23:16:37 +0900, Kenta Murata muraken@gmail.com writes:

|Issue #4878 has been reported by Kenta Murata.
|
|----------------------------------------
|Feature #4878: CMath に frexp, ldexp, hypot の3関数は不要ではないか
|http://redmine.ruby-lang.org/issues/4878

|現在 CMath は、Math を include して各関数を再定義することで実装されています。
|このやり方では、複素数向けの関数としては定義できない frexp, ldexp, hypot の3関数も同時に include されてしまいます。
|これらは Math の関数として定義されていれば良いだけですので、CMath からの削除を提案します。

なるほど。同意します。削除のタイミングはメンテナにお任せします。

#3 Updated by tadayoshi funaba about 4 years ago

もう結論が出てしまったようですが、これは、元々 lib/complex.rb にあった
ものを独立させたものですが、その意味は、複素数用の関数を提供する事では
なく、複素数ドメインに対応した Math を提供する、という事だと理解してい
ました。つまり、実数用としてつかわれる限り、Math とまったく同じであるこ
とが望まれていたと考えます。

#4 Updated by tadayoshi funaba about 4 years ago

もう結論が出てしまったようですが、これは、元々 lib/complex.rb にあった
ものを独立させたものですが、その意味は、複素数用の関数を提供する事では
なく、複素数ドメインに対応した Math を提供する、という事だと理解してい
ました。つまり、実数用としてつかわれる限り、Math とまったく同じであるこ
とが望まれていたと考えます。

#5 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 12:16 AM, Tadayoshi Funaba wrote:

もう結論が出てしまったようですが、これは、元々 lib/complex.rb にあった
ものを独立させたものですが、その意味は、複素数用の関数を提供する事では
なく、複素数ドメインに対応した Math を提供する、という事だと理解してい
ました。つまり、実数用としてつかわれる限り、Math とまったく同じであるこ
とが望まれていたと考えます。

complex.rb をロードすると Math が CMath 相当に置き換わりますから、
Math を置き換える際に frexp, ldexp, hypot を定義することで対応可能かと思います。

そういう事ですよね?
--
Kenta Murata
Sent with Sparrow (http://www.sparrowmailapp.com)

#6 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 12:16 AM, Tadayoshi Funaba wrote:

もう結論が出てしまったようですが、これは、元々 lib/complex.rb にあった
ものを独立させたものですが、その意味は、複素数用の関数を提供する事では
なく、複素数ドメインに対応した Math を提供する、という事だと理解してい
ました。つまり、実数用としてつかわれる限り、Math とまったく同じであるこ
とが望まれていたと考えます。

complex.rb をロードすると Math が CMath 相当に置き換わりますから、
Math を置き換える際に frexp, ldexp, hypot を定義することで対応可能かと思います。

そういう事ですよね?
--
Kenta Murata
Sent with Sparrow (http://www.sparrowmailapp.com)

#7 Updated by tadayoshi funaba about 4 years ago

complex.rb をロードすると Math が CMath 相当に置き換わりますから、
Math を置き換える際に frexp, ldexp, hypot を定義することで対応可能かと思います。

そういう事ですよね?

そうではありません。CMath 単体で、です。実際、複素数用の関数を定義して
いるのではなく、複素数にもつかえるように拡張したものを提供しようとして
いますよね。

#8 Updated by tadayoshi funaba about 4 years ago

complex.rb をロードすると Math が CMath 相当に置き換わりますから、
Math を置き換える際に frexp, ldexp, hypot を定義することで対応可能かと思います。

そういう事ですよね?

そうではありません。CMath 単体で、です。実際、複素数用の関数を定義して
いるのではなく、複素数にもつかえるように拡張したものを提供しようとして
いますよね。

#9 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 8:45 AM, Tadayoshi Funaba wrote:

complex.rb をロードすると Math が CMath 相当に置き換わりますから、
Math を置き換える際に frexp, ldexp, hypot を定義することで対応可能かと思います。

そういう事ですよね?

そうではありません。CMath 単体で、です。実際、複素数用の関数を定義して
いるのではなく、複素数にもつかえるように拡張したものを提供しようとして
いますよね。

私は、これらの関数について以下のように解釈し、CMath からの削除を提案しました。
(1) frexp と ldexp は2を底とする浮動小数点数表現に対する関数なので、表現から中立である複素数に対して無意味である。
(2) hypot(x, y) は sqrt(x*2 + y*2) という定義があるので、再定義することで複素数に拡張可能だけど無意味ではないか?

Math と CMath が同時に存在している場合、つまり cmath.rb のみを require した場合、
上記3関数は Math のものを使用できるため、CMath で定義される必要は無いはずです。

現在、CMath に定義されている上記3関数は複素数に対して使用できません。
ふなばさんは、frexp, ldexp, hypot の3関数について、
CMath 単体でどのように定義されるべきだとお考えですか?

--
Kenta Murata
Sent with Sparrow

#10 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 8:45 AM, Tadayoshi Funaba wrote:

complex.rb をロードすると Math が CMath 相当に置き換わりますから、
Math を置き換える際に frexp, ldexp, hypot を定義することで対応可能かと思います。

そういう事ですよね?

そうではありません。CMath 単体で、です。実際、複素数用の関数を定義して
いるのではなく、複素数にもつかえるように拡張したものを提供しようとして
いますよね。

私は、これらの関数について以下のように解釈し、CMath からの削除を提案しました。
(1) frexp と ldexp は2を底とする浮動小数点数表現に対する関数なので、表現から中立である複素数に対して無意味である。
(2) hypot(x, y) は sqrt(x*2 + y*2) という定義があるので、再定義することで複素数に拡張可能だけど無意味ではないか?

Math と CMath が同時に存在している場合、つまり cmath.rb のみを require した場合、
上記3関数は Math のものを使用できるため、CMath で定義される必要は無いはずです。

現在、CMath に定義されている上記3関数は複素数に対して使用できません。
ふなばさんは、frexp, ldexp, hypot の3関数について、
CMath 単体でどのように定義されるべきだとお考えですか?

--
Kenta Murata
Sent with Sparrow

#11 Updated by Yukihiro Matsumoto about 4 years ago

まつもと ゆきひろです

In message "Re: Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Tue, 14 Jun 2011 11:57:26 +0900, Kenta Murata muraken@gmail.com writes:

|Math と CMath が同時に存在している場合、つまり cmath.rb のみを require した場合、
|上記3関数は Math のものを使用できるため、CMath で定義される必要は無いはずです。

Pythonではmathをcmathに置き換えるようなスタイルが時々見られ
るようです。Rubyだと

require "cmath"
Math = CMath

みたいな。こういうコードを仮定すると、関数を取り除かない
(Mathと互換のまま残す)というのも意味があるのかもしれません。

#12 Updated by Yukihiro Matsumoto about 4 years ago

まつもと ゆきひろです

In message "Re: Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Tue, 14 Jun 2011 11:57:26 +0900, Kenta Murata muraken@gmail.com writes:

|Math と CMath が同時に存在している場合、つまり cmath.rb のみを require した場合、
|上記3関数は Math のものを使用できるため、CMath で定義される必要は無いはずです。

Pythonではmathをcmathに置き換えるようなスタイルが時々見られ
るようです。Rubyだと

require "cmath"
Math = CMath

みたいな。こういうコードを仮定すると、関数を取り除かない
(Mathと互換のまま残す)というのも意味があるのかもしれません。

#13 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 12:53 PM, Yukihiro Matsumoto wrote:

In message "Re: Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Tue, 14 Jun 2011 11:57:26 +0900, Kenta Murata writes:

|Math と CMath が同時に存在している場合、つまり cmath.rb のみを require した場合、
|上記3関数は Math のものを使用できるため、CMath で定義される必要は無いはずです。

Pythonではmathをcmathに置き換えるようなスタイルが時々見られ
るようです。Rubyだと

require "cmath"
Math = CMath

みたいな。こういうコードを仮定すると、関数を取り除かない
(Mathと互換のまま残す)というのも意味があるのかもしれません。

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

たとえば、以下のパッチのような方法です。
https://gist.github.com/1024322

--
Kenta Murata
Sent with Sparrow

#14 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 12:53 PM, Yukihiro Matsumoto wrote:

In message "Re: Re: [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Tue, 14 Jun 2011 11:57:26 +0900, Kenta Murata writes:

|Math と CMath が同時に存在している場合、つまり cmath.rb のみを require した場合、
|上記3関数は Math のものを使用できるため、CMath で定義される必要は無いはずです。

Pythonではmathをcmathに置き換えるようなスタイルが時々見られ
るようです。Rubyだと

require "cmath"
Math = CMath

みたいな。こういうコードを仮定すると、関数を取り除かない
(Mathと互換のまま残す)というのも意味があるのかもしれません。

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

たとえば、以下のパッチのような方法です。
https://gist.github.com/1024322

--
Kenta Murata
Sent with Sparrow

#15 Updated by tadayoshi funaba about 4 years ago

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

lib/complex.rb は互換のために残っているだけで推奨されません。

こちらの立場から言えば、CMath は制限を取り除いた、あるいは取り除こうと
している Math の代替版というところですかね。

実際、これらは include してつかうことも想定され、一揃えの物として扱われ
るわけで、これは複素数に対応できた、できないで分けるとか、併用するとい
うのは、なくはないけど、最初からそれを利用者に要求するのはどうなのかな。

lib/cmath.rb をつかっていても、その呼び出しの全てで複素数が活躍している
とは限らないわけですよね。CMath に hypot がないのは、複素数のために拡張
しようがなかったからだとしても、実際に利用者は、実数を与え、実数を得る
かたちでしか、sin なんかを使っていないかもしれないじゃないですか。利用
者にその区別をさせる必要があるんでしょうか。

#16 Updated by tadayoshi funaba about 4 years ago

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

lib/complex.rb は互換のために残っているだけで推奨されません。

こちらの立場から言えば、CMath は制限を取り除いた、あるいは取り除こうと
している Math の代替版というところですかね。

実際、これらは include してつかうことも想定され、一揃えの物として扱われ
るわけで、これは複素数に対応できた、できないで分けるとか、併用するとい
うのは、なくはないけど、最初からそれを利用者に要求するのはどうなのかな。

lib/cmath.rb をつかっていても、その呼び出しの全てで複素数が活躍している
とは限らないわけですよね。CMath に hypot がないのは、複素数のために拡張
しようがなかったからだとしても、実際に利用者は、実数を与え、実数を得る
かたちでしか、sin なんかを使っていないかもしれないじゃないですか。利用
者にその区別をさせる必要があるんでしょうか。

#17 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月14日20:37 Tadayoshi Funaba tadf@dotrb.org:

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

lib/complex.rb は互換のために残っているだけで推奨されません。

こちらの立場から言えば、CMath は制限を取り除いた、あるいは取り除こうと
している Math の代替版というところですかね。

定義域を増やすだけにしよう、ということですよね。賛成です。
そういう意味で、cbrt(-8) は Math を尊重して -2 を返すべきだと思うのですが、
いかがでしょうか。

--
Yusuke Endoh mame@tsg.ne.jp

#18 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月14日20:37 Tadayoshi Funaba tadf@dotrb.org:

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

lib/complex.rb は互換のために残っているだけで推奨されません。

こちらの立場から言えば、CMath は制限を取り除いた、あるいは取り除こうと
している Math の代替版というところですかね。

定義域を増やすだけにしよう、ということですよね。賛成です。
そういう意味で、cbrt(-8) は Math を尊重して -2 を返すべきだと思うのですが、
いかがでしょうか。

--
Yusuke Endoh mame@tsg.ne.jp

#19 Updated by tadayoshi funaba about 4 years ago

定義域を増やすだけにしよう、ということですよね。賛成です。
そういう意味で、cbrt(-8) は Math を尊重して -2 を返すべきだと思うのですが、
いかがでしょうか。

値域も拡大されますね。だから、-2 にはならないでしょう。実数を与え、実数
が返る範中では Math と同じということだと思います。

#20 Updated by tadayoshi funaba about 4 years ago

定義域を増やすだけにしよう、ということですよね。賛成です。
そういう意味で、cbrt(-8) は Math を尊重して -2 を返すべきだと思うのですが、
いかがでしょうか。

値域も拡大されますね。だから、-2 にはならないでしょう。実数を与え、実数
が返る範中では Math と同じということだと思います。

#21 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 8:37 PM, Tadayoshi Funaba wrote:

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

lib/complex.rb は互換のために残っているだけで推奨されません。

あー、本当ですね。最初に警告を出している行を完全に見逃していました。

であれば、確かに CMath が Math の役割を果せる必要はありますね。
納得できたので、この提案は撤回させて頂きます。

--
Kenta Murata
Sent with Sparrow (http://www.sparrowmailapp.com)

#22 Updated by Kenta Murata about 4 years ago

むらたです。

On Tuesday, June 14, 2011 at 8:37 PM, Tadayoshi Funaba wrote:

これに相当する事をやっているのが complex.rb なので、
Ruby では上記に相当する処理をやりたければ require "complex" することにして、
complex.rb の中で適切に関数を定義すれば良いと考えていました。

lib/complex.rb は互換のために残っているだけで推奨されません。

あー、本当ですね。最初に警告を出している行を完全に見逃していました。

であれば、確かに CMath が Math の役割を果せる必要はありますね。
納得できたので、この提案は撤回させて頂きます。

--
Kenta Murata
Sent with Sparrow (http://www.sparrowmailapp.com)

#23 Updated by Yusuke Endoh about 4 years ago

2011年6月14日22:17 Tadayoshi Funaba tadf@dotrb.org:

定義域を増やすだけにしよう、ということですよね。賛成です。
そういう意味で、cbrt(-8) は Math を尊重して -2 を返すべきだと思うのですが、
いかがでしょうか。

値域も拡大されますね。だから、-2 にはならないでしょう。実数を与え、実数
が返る範中では Math と同じということだと思います。

互換性がないという点では同じ話だと思うのですが……。

--
Yusuke Endoh mame@tsg.ne.jp

#24 Updated by Yusuke Endoh about 4 years ago

2011年6月14日22:17 Tadayoshi Funaba tadf@dotrb.org:

定義域を増やすだけにしよう、ということですよね。賛成です。
そういう意味で、cbrt(-8) は Math を尊重して -2 を返すべきだと思うのですが、
いかがでしょうか。

値域も拡大されますね。だから、-2 にはならないでしょう。実数を与え、実数
が返る範中では Math と同じということだと思います。

互換性がないという点では同じ話だと思うのですが……。

--
Yusuke Endoh mame@tsg.ne.jp

#25 Updated by tadayoshi funaba about 4 years ago

互換性がないという点では同じ話だと思うのですが……。

主値にならない Math.cbrt を尊重するというのは難しいんじゃないでしょうか。
どうしてもそれが重要だと思われるなら、この件とは関係がないので、改めて
提案を出されるとか。

#26 Updated by tadayoshi funaba about 4 years ago

互換性がないという点では同じ話だと思うのですが……。

主値にならない Math.cbrt を尊重するというのは難しいんじゃないでしょうか。
どうしてもそれが重要だと思われるなら、この件とは関係がないので、改めて
提案を出されるとか。

#27 Updated by Yusuke Endoh about 4 years ago

2011年6月14日23:02 Tadayoshi Funaba tadf@dotrb.org:

互換性がないという点では同じ話だと思うのですが……。

主値にならない Math.cbrt を尊重するというのは難しいんじゃないでしょうか。
どうしてもそれが重要だと思われるなら、この件とは関係がないので、改めて
提案を出されるとか。

いやあ、5 月末の feature freeze 時点では -2 を返していたはずなんですが、
6 月になってから (議論事項が残ったまま) 変わったんですよね。

http://redmine.ruby-lang.org/issues/3676

--
Yusuke Endoh mame@tsg.ne.jp

#28 Updated by Yusuke Endoh about 4 years ago

2011年6月14日23:02 Tadayoshi Funaba tadf@dotrb.org:

互換性がないという点では同じ話だと思うのですが……。

主値にならない Math.cbrt を尊重するというのは難しいんじゃないでしょうか。
どうしてもそれが重要だと思われるなら、この件とは関係がないので、改めて
提案を出されるとか。

いやあ、5 月末の feature freeze 時点では -2 を返していたはずなんですが、
6 月になってから (議論事項が残ったまま) 変わったんですよね。

http://redmine.ruby-lang.org/issues/3676

--
Yusuke Endoh mame@tsg.ne.jp

#29 Updated by tadayoshi funaba about 4 years ago

いやあ、5 月末の feature freeze 時点では -2 を返していたはずなんですが、
6 月になってから (議論事項が残ったまま) 変わったんですよね。

それは、元々主値を返すようになっていたのに、-2 を返すように間違って変更
されたという結論になったからでしょう。最初に CMath.cbrt を加えたのは俺
で、その後なぜか、-2 が返るように変更されたのです。ですから、これはバグ
が修正されたという理解ですが。

#30 Updated by tadayoshi funaba about 4 years ago

いやあ、5 月末の feature freeze 時点では -2 を返していたはずなんですが、
6 月になってから (議論事項が残ったまま) 変わったんですよね。

それは、元々主値を返すようになっていたのに、-2 を返すように間違って変更
されたという結論になったからでしょう。最初に CMath.cbrt を加えたのは俺
で、その後なぜか、-2 が返るように変更されたのです。ですから、これはバグ
が修正されたという理解ですが。

#31 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月14日23:27 Tadayoshi Funaba tadf@dotrb.org:

いやあ、5 月末の feature freeze 時点では -2 を返していたはずなんですが、
6 月になってから (議論事項が残ったまま) 変わったんですよね。

それは、元々主値を返すようになっていたのに、-2 を返すように間違って変更
されたという結論になったからでしょう。最初に CMath.cbrt を加えたのは俺
で、その後なぜか、-2 が返るように変更されたのです。ですから、これはバグ
が修正されたという理解ですが。

-2 を返すように変更するのは議論してからにすべきだったとは思っていますが、
「間違っていた」とはあまり思っていません。
ふなばさんもおっしゃるように CMath が Math との互換性を考えているなら、
-2 を返す以外の選択肢があるようには思えないのです。
あと、 のまつもとさんの議題提出に対して議論されたよう
にも見えません。

--
Yusuke Endoh mame@tsg.ne.jp

#32 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月14日23:27 Tadayoshi Funaba tadf@dotrb.org:

いやあ、5 月末の feature freeze 時点では -2 を返していたはずなんですが、
6 月になってから (議論事項が残ったまま) 変わったんですよね。

それは、元々主値を返すようになっていたのに、-2 を返すように間違って変更
されたという結論になったからでしょう。最初に CMath.cbrt を加えたのは俺
で、その後なぜか、-2 が返るように変更されたのです。ですから、これはバグ
が修正されたという理解ですが。

-2 を返すように変更するのは議論してからにすべきだったとは思っていますが、
「間違っていた」とはあまり思っていません。
ふなばさんもおっしゃるように CMath が Math との互換性を考えているなら、
-2 を返す以外の選択肢があるようには思えないのです。
あと、 のまつもとさんの議題提出に対して議論されたよう
にも見えません。

--
Yusuke Endoh mame@tsg.ne.jp

#33 Updated by tadayoshi funaba about 4 years ago

-2 を返すように変更するのは議論してからにすべきだったとは思っていますが、
「間違っていた」とはあまり思っていません。
ふなばさんもおっしゃるように CMath が Math との互換性を考えているなら、
-2 を返す以外の選択肢があるようには思えないのです。
あと、 のまつもとさんの議題提出に対して議論されたよう
にも見えません。

かなり誤解しているようなんで言っておきますが、俺は互換性が大事だなんて
思ってないんですよ。

そもそも、Math を複素数対応にして一本化したらと提案していたのですから、
互換性重視じゃないんです。CMath が出来た経緯は簡単に言うと、一体化に踏
み切れなかったから暖簾わけしたという事だと思います。

そういう経緯からすれば、振る舞いが違う事は承知の上で、俺の言い方でいえ
ば、本来あってほしいように CMath では制限をなくす方向で拡張される事が望
まれているわけで、Math を基準に矮小化する事は考えられていなかったと思い
ます。

完全な互換性がないからこそ取り敢えず暖簾分けしたわけで、遠藤さんの理屈
は通らないですよ。

あと、一応意見は言いましたが、俺は、lib/cmath.rb のメンテナでもないし、
このバグの修正を決めたわけでもありません。なので、俺に文句を言いたいら
しいようですが、俺に言ってもどうにもなりません。

Math.cbrt の振舞いがどうしても重要と思えば、それを得る方法はいくらでも
あるし (村田さんも提案していますし、別の方法もあるでしょう)、CMath がそ
れをその為だけに尊重する理由にはならないと思います。

#34 Updated by tadayoshi funaba about 4 years ago

-2 を返すように変更するのは議論してからにすべきだったとは思っていますが、
「間違っていた」とはあまり思っていません。
ふなばさんもおっしゃるように CMath が Math との互換性を考えているなら、
-2 を返す以外の選択肢があるようには思えないのです。
あと、 のまつもとさんの議題提出に対して議論されたよう
にも見えません。

かなり誤解しているようなんで言っておきますが、俺は互換性が大事だなんて
思ってないんですよ。

そもそも、Math を複素数対応にして一本化したらと提案していたのですから、
互換性重視じゃないんです。CMath が出来た経緯は簡単に言うと、一体化に踏
み切れなかったから暖簾わけしたという事だと思います。

そういう経緯からすれば、振る舞いが違う事は承知の上で、俺の言い方でいえ
ば、本来あってほしいように CMath では制限をなくす方向で拡張される事が望
まれているわけで、Math を基準に矮小化する事は考えられていなかったと思い
ます。

完全な互換性がないからこそ取り敢えず暖簾分けしたわけで、遠藤さんの理屈
は通らないですよ。

あと、一応意見は言いましたが、俺は、lib/cmath.rb のメンテナでもないし、
このバグの修正を決めたわけでもありません。なので、俺に文句を言いたいら
しいようですが、俺に言ってもどうにもなりません。

Math.cbrt の振舞いがどうしても重要と思えば、それを得る方法はいくらでも
あるし (村田さんも提案していますし、別の方法もあるでしょう)、CMath がそ
れをその為だけに尊重する理由にはならないと思います。

#35 Updated by Keiju Ishitsuka about 4 years ago

けいじゅ@いしつかです.

In the message: " Re: [Ruby 1.9 -
Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではな
いか", on Jun/17 01:10(JST) Yusuke ENDOH writes:

遠藤です。

-2 を返すように変更するのは議論してからにすべきだったとは思っていますが、
「間違っていた」とはあまり思っていません。
ふなばさんもおっしゃるように CMath が Math との互換性を考えているなら、
-2 を返す以外の選択肢があるようには思えないのです。

遠藤さんの言っているのは以下の実装ですよね?

def cbrt(z)
if z.real?
cbrt!(z)
else
Complex(z) ** (1.0/3)
end
end

これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき
ています. この点についてどう考えています?

ちなみに, 他のCMath関数は実数時について別に実装していることが多いです
が, 上記のように値が異なる事はないようになっています.

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

#36 Updated by Keiju Ishitsuka about 4 years ago

けいじゅ@いしつかです.

In the message: " Re: [Ruby 1.9 -
Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではな
いか", on Jun/17 01:10(JST) Yusuke ENDOH writes:

遠藤です。

-2 を返すように変更するのは議論してからにすべきだったとは思っていますが、
「間違っていた」とはあまり思っていません。
ふなばさんもおっしゃるように CMath が Math との互換性を考えているなら、
-2 を返す以外の選択肢があるようには思えないのです。

遠藤さんの言っているのは以下の実装ですよね?

def cbrt(z)
if z.real?
cbrt!(z)
else
Complex(z) ** (1.0/3)
end
end

これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき
ています. この点についてどう考えています?

ちなみに, 他のCMath関数は実数時について別に実装していることが多いです
が, 上記のように値が異なる事はないようになっています.

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

#37 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月17日14:19 石塚圭樹 keiju@ishitsuka.com:

遠藤さんの言っているのは以下の実装ですよね?

def cbrt(z)
if z.real?
cbrt!(z)
else
Complex(z) ** (1.0/3)
end
end

これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき
ています. この点についてどう考えています?

なんと。
それは cbrt(-8) で -2 を返すようにした際の私の修正の「バグ」です。
Complex(-8, 0).real? が false とは想定外でした。

--
Yusuke Endoh mame@tsg.ne.jp

#38 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月17日14:19 石塚圭樹 keiju@ishitsuka.com:

遠藤さんの言っているのは以下の実装ですよね?

def cbrt(z)
if z.real?
cbrt!(z)
else
Complex(z) ** (1.0/3)
end
end

これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき
ています. この点についてどう考えています?

なんと。
それは cbrt(-8) で -2 を返すようにした際の私の修正の「バグ」です。
Complex(-8, 0).real? が false とは想定外でした。

--
Yusuke Endoh mame@tsg.ne.jp

#39 Updated by Keiju Ishitsuka about 4 years ago

けいじゅ@いしつかです.

In the message: " Re: [Ruby 1.9 -
Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではな
いか", on Jun/17 15:37(JST) Yusuke ENDOH writes:

遠藤です。

def cbrt(z)
if z.real?
cbrt!(z)
else
Complex(z) ** (1.0/3)
end
end

これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき
ています. この点についてどう考えています?

なんと。
それは cbrt(-8) で -2 を返すようにした際の私の修正の「バグ」です。
Complex(-8, 0).real? が false とは想定外でした。

メソッド名が悪かったかなぁ. それはともかく,

CMath.cbrt(-8) == CMath.cbrt(Complex(-8,0))

となる, 自然な実装(正則(連続)になる複素関数)は 主値を取るメソッド:

def cbrt(z)
Complex(z) ** (1.0/3)
end

以外ないので, これで納得してもらえます?

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

#40 Updated by Keiju Ishitsuka about 4 years ago

けいじゅ@いしつかです.

In the message: " Re: [Ruby 1.9 -
Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではな
いか", on Jun/17 15:37(JST) Yusuke ENDOH writes:

遠藤です。

def cbrt(z)
if z.real?
cbrt!(z)
else
Complex(z) ** (1.0/3)
end
end

これだと, CMath.cbrt(-8) と CMath.cbrt(Complex(-8,0)) で値が異なってき
ています. この点についてどう考えています?

なんと。
それは cbrt(-8) で -2 を返すようにした際の私の修正の「バグ」です。
Complex(-8, 0).real? が false とは想定外でした。

メソッド名が悪かったかなぁ. それはともかく,

CMath.cbrt(-8) == CMath.cbrt(Complex(-8,0))

となる, 自然な実装(正則(連続)になる複素関数)は 主値を取るメソッド:

def cbrt(z)
Complex(z) ** (1.0/3)
end

以外ないので, これで納得してもらえます?

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

#41 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月17日1:58 Tadayoshi Funaba tadf@dotrb.org:

完全な互換性がないからこそ取り敢えず暖簾分けしたわけで、遠藤さんの理屈
は通らないですよ。

なるほど。「CMath が Math と互換でない」ということなら、あまり喜ばしい
話だとは思いませんが納得はできます。

あと、一応意見は言いましたが、俺は、lib/cmath.rb のメンテナでもないし、
このバグの修正を決めたわけでもありません。なので、俺に文句を言いたいら
しいようですが、俺に言ってもどうにもなりません。

バグ報告者が説得出来ればもどるかなと思ったので。
まあ mrkn さんに直接言うべきでしたね。すみません。

--
Yusuke Endoh mame@tsg.ne.jp

#42 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月17日1:58 Tadayoshi Funaba tadf@dotrb.org:

完全な互換性がないからこそ取り敢えず暖簾分けしたわけで、遠藤さんの理屈
は通らないですよ。

なるほど。「CMath が Math と互換でない」ということなら、あまり喜ばしい
話だとは思いませんが納得はできます。

あと、一応意見は言いましたが、俺は、lib/cmath.rb のメンテナでもないし、
このバグの修正を決めたわけでもありません。なので、俺に文句を言いたいら
しいようですが、俺に言ってもどうにもなりません。

バグ報告者が説得出来ればもどるかなと思ったので。
まあ mrkn さんに直接言うべきでしたね。すみません。

--
Yusuke Endoh mame@tsg.ne.jp

#43 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月17日16:33 石塚圭樹 keiju@ishitsuka.com:

CMath.cbrt(-8) == CMath.cbrt(Complex(-8,0))

となる, 自然な実装(正則(連続)になる複素関数)は 主値を取るメソッド:

def cbrt(z)
Complex(z) ** (1.0/3)
end

以外ないので, これで納得してもらえます?

を送ったつもりだったのですが、ミスで送れていませんでした。
CMath は Math と上位互換ではない、ということで一応は納得しています。

--
Yusuke Endoh mame@tsg.ne.jp

#44 Updated by Yusuke Endoh about 4 years ago

遠藤です。

2011年6月17日16:33 石塚圭樹 keiju@ishitsuka.com:

CMath.cbrt(-8) == CMath.cbrt(Complex(-8,0))

となる, 自然な実装(正則(連続)になる複素関数)は 主値を取るメソッド:

def cbrt(z)
Complex(z) ** (1.0/3)
end

以外ないので, これで納得してもらえます?

を送ったつもりだったのですが、ミスで送れていませんでした。
CMath は Math と上位互換ではない、ということで一応は納得しています。

--
Yusuke Endoh mame@tsg.ne.jp

#45 Updated by Motohiro KOSAKI over 3 years ago

  • Status changed from Open to Rejected

提案者が提案を取り下げているようなのでrejectします

Also available in: Atom PDF