Project

General

Profile

Actions

Feature #4878

closed

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

Added by mrkn (Kenta Murata) over 13 years ago. Updated almost 13 years ago.

Status:
Rejected
Target version:
[ruby-dev:43787]

Description

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

Updated by matz (Yukihiro Matsumoto) over 13 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:43787] [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Mon, 13 Jun 2011 23:16:37 +0900, Kenta Murata 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 からの削除を提案します。

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

Updated by matz (Yukihiro Matsumoto) over 13 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:43787] [Ruby 1.9 - Feature #4878][Open] CMath に frexp, ldexp, hypot の3関数は不要ではないか"
on Mon, 13 Jun 2011 23:16:37 +0900, Kenta Murata 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 からの削除を提案します。

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

Updated by mrkn (Kenta Murata) over 13 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)

Updated by mrkn (Kenta Murata) over 13 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)

Updated by tadf (tadayoshi funaba) over 13 years ago

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

そういう事ですよね?

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

そういう事ですよね?

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

Updated by mrkn (Kenta Murata) over 13 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(x2 + y2) という定義があるので、再定義することで複素数に拡張可能だけど無意味ではないか?

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

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

--
Kenta Murata
Sent with Sparrow

Updated by mrkn (Kenta Murata) over 13 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(x2 + y2) という定義があるので、再定義することで複素数に拡張可能だけど無意味ではないか?

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

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

--
Kenta Murata
Sent with Sparrow

Updated by matz (Yukihiro Matsumoto) over 13 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:43797] 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と互換のまま残す)というのも意味があるのかもしれません。

Updated by matz (Yukihiro Matsumoto) over 13 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:43797] 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と互換のまま残す)というのも意味があるのかもしれません。

Updated by mrkn (Kenta Murata) over 13 years ago

むらたです。

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

In message "Re: [ruby-dev:43797] 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

Updated by mrkn (Kenta Murata) over 13 years ago

むらたです。

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

In message "Re: [ruby-dev:43797] 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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

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

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

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

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

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

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

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月14日20:37 Tadayoshi Funaba :

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

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月14日20:37 Tadayoshi Funaba :

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

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

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

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

--
Yusuke Endoh

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

Updated by mrkn (Kenta Murata) over 13 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)

Updated by mrkn (Kenta Murata) over 13 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)

Updated by mame (Yusuke Endoh) over 13 years ago

2011年6月14日22:17 Tadayoshi Funaba :

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

2011年6月14日22:17 Tadayoshi Funaba :

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

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

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

--
Yusuke Endoh

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

Updated by mame (Yusuke Endoh) over 13 years ago

2011年6月14日23:02 Tadayoshi Funaba :

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

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

2011年6月14日23:02 Tadayoshi Funaba :

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

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

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

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

--
Yusuke Endoh

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月14日23:27 Tadayoshi Funaba :

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月14日23:27 Tadayoshi Funaba :

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

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

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

--
Yusuke Endoh

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

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

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

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

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

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

Updated by tadf (tadayoshi funaba) over 13 years ago

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

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

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

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

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

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

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

Updated by keiju (Keiju Ishitsuka) over 13 years ago

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

In [ruby-dev:43832] the message: "[ruby-dev:43832] 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: <<---

Updated by keiju (Keiju Ishitsuka) over 13 years ago

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

In [ruby-dev:43832] the message: "[ruby-dev:43832] 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: <<---

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月17日14:19 石塚圭樹 :

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

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

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月17日14:19 石塚圭樹 :

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

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

Updated by keiju (Keiju Ishitsuka) over 13 years ago

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

In [ruby-dev:43840] the message: "[ruby-dev:43840] 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: <<---

Updated by keiju (Keiju Ishitsuka) over 13 years ago

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

In [ruby-dev:43840] the message: "[ruby-dev:43840] 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: <<---

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月17日1:58 Tadayoshi Funaba :

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

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月17日1:58 Tadayoshi Funaba :

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

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月17日16:33 石塚圭樹 :

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

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

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

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

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

--
Yusuke Endoh

Updated by mame (Yusuke Endoh) over 13 years ago

遠藤です。

2011年6月17日16:33 石塚圭樹 :

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

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

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

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

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

--
Yusuke Endoh

Updated by kosaki (Motohiro KOSAKI) almost 13 years ago

  • Status changed from Open to Rejected

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0