doctree icon indicating copy to clipboard operation
doctree copied to clipboard

Math と CMath の課題

Open scivola opened this issue 5 years ago • 7 comments

Math と CMath の関数について,以下のような課題があると思います。

(追記 2023-01-06:CMath は Ruby 2.7 で標準添付ライブラリーから外されたので現時点でやることはもう無い)

[1] サンプルコードの新記法化 #1546 → 済(#1573 #1574)

[2] サンプルコードの整備 #433 ~ただし,Math のほうはご担当が既に決まっています(@tbpgr さん)。~ Math は終わっているので CMath に関して。

→ CMath はやらないので,[2] は終了。

[3] sin, cos, tan のように,返り値が「角」ではないのに誤って「ラジアンで返します」とあるものを修正(「ラジアンで」を削除)。 一方,sin では引数がラジアンであることは書くべきなので,引数の説明に「ラジアンで与える」といった文言を追加。

ただ,CMath については「ラジアン」を全削除でいいような気もします。というのは,複素関数の場合,たとえば sin(z) の z はもはや角度とは解釈できず,実関数の場合の,「〈度〉バージョンの sin」に相当するものは考えないからです。

→ CMath は済(#1616) ただし,引数に「ラジアンで」を追記した。 → [3] は終了(#1615)

[4] CMath の「要約」の例に include CMath した使い方を追加。 sin! など ! のついたメソッドが必要になるのはこの使い方のときなので。 → 済(#1576)

[5] 関数間の相互リンク とくに以下のもの

  • 逆関数との間(sinasin
  • Math/CMath 間(Math.sinCMath.sin
  • CMath における ! の有無の間(sinsin!

→ CMath はやらないので,[5] は Math の逆関数との相互リンクのみ → [5] は終了(#2784)

[6] 関数名の英語を書く 例えば asinh の場合,「逆双曲線正弦関数」のあとに「(area hyperbolic sine)」を併記します。 これにより,メソッド名の由来が明確になるほか,その関数の数学的知識を検索するのが楽になります。

→ [6] は終了(#2776)

[7] CMath の多価関数の値を明確に 例えば sqrt には「z の平方根を返します。」とだけありますが,平方根は z が 0 の場合を除けば二つあるので,説明として不十分です。 一方,cbrt には「z の立方根の内、主値を返します。」とあり,三つある立方根のどれであるかが明確にされています(主値の定義を書くべきですが)。

たぶん実装を見ないといけないので大変です。

→ CMath はやらないので,[7] は終了。

[8] 定義域(引数の値の範囲)を正確に 引数として取れる値の範囲が不正確なものがいくつかあります。 例えば log は「正の実数を指定します。」とありますが,0 を与えることもできます。

これらのうち,[4] はただちにやれるほか,各関数について [3][5][6] はほぼ機械的にいっぺんにやれそうなのでやらせていただこうかと思うのですが,プルリクエストとコミットの分け方はどのようにすればよろしいでしょうか。 [3][5][6] はメソッドごとに別のプルリクエストにしたほうがよいでしょうか? その場合,[3] と [5] と [6] とでコミットは分けるべきですか?


追記(2018-11-08)

書き漏らしがありました。

[9] 不要な分岐の削除

これにより,上記の

[3][5][6] はほぼ機械的にいっぺんにやれそう

[3][5][6][9] はほぼ機械的にいっぺんにやれそう

と訂正します。

scivola avatar Nov 07 '18 14:11 scivola

Math ですが、自分が担当してプルリク出したやつはもう終わってて、マージされていることを確認しました。なので、 #433 の対応としては一旦完了扱いにするので、以降私以外が着手しても問題ないです。

tbpgr avatar Nov 07 '18 16:11 tbpgr

わかりましたー

あっ,それから,書きわすれましたが,[1] に関しては 1 コミットで Math 全体あるいは CMath 全体をやっちゃってよいものでしょうか? それともメソッドごとに別のコミット(プルリクは一つ)にしたほうがよいでしょうか。

scivola avatar Nov 07 '18 16:11 scivola

その辺の粒度の話は @sho-h さんですね(通知)

tbpgr avatar Nov 07 '18 17:11 tbpgr

[1] に関しては 1 コミットで Math 全体あるいは CMath 全体をやっちゃってよいものでしょうか?

とりあえずこちらだけ。 全体で大丈夫ですー。たぶん1メソッドごとにrevertしたい事はないかと思いますので。

sho-h avatar Nov 08 '18 04:11 sho-h

わかりましたー

[1] の作業の際,行末スペースの削除は同じコミットに含めちゃっても大丈夫でしょうか。 (エディターが行末スペースを自動削除してくれるので)

scivola avatar Nov 08 '18 06:11 scivola

[1] の作業の際,行末スペースの削除は同じコミットに含めちゃっても大丈夫でしょうか。

はい。そこまで細かいものはrevertする事もそうないかと思いますので、やりやすいようにでいいかと思います。

sho-h avatar Nov 09 '18 00:11 sho-h

残るは

[8] 定義域(引数の値の範囲)を正確に

のみとなりました。 これは例えば Math.sqrt の引数が「正の実数」となっているような誤りを訂正する,ということです。 Math.sqrt は当然 0 を与えることもできますし,Complex であれば負の実数(例:-1+0i)も OK なようです。

実装を見ないといけないとすると,私の手に負えないので,どなたかにお願いしたいです。 rdoc の説明も間違っています(sqrt の定義域が [0, INFINITY] になってる)。

実験結果に基づいて訂正する,というのであれば私にもやれそうですが。

scivola avatar Jan 25 '23 12:01 scivola