doctree
doctree copied to clipboard
Math と CMath の課題
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] 関数間の相互リンク とくに以下のもの
- 逆関数との間(
sin
⇄asin
) - Math/CMath 間(
Math.sin
⇄CMath.sin
) - CMath における
!
の有無の間(sin
⇄sin!
)
→ 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] はほぼ機械的にいっぺんにやれそう
と訂正します。
Math ですが、自分が担当してプルリク出したやつはもう終わってて、マージされていることを確認しました。なので、 #433 の対応としては一旦完了扱いにするので、以降私以外が着手しても問題ないです。
わかりましたー
あっ,それから,書きわすれましたが,[1] に関しては 1 コミットで Math 全体あるいは CMath 全体をやっちゃってよいものでしょうか? それともメソッドごとに別のコミット(プルリクは一つ)にしたほうがよいでしょうか。
その辺の粒度の話は @sho-h さんですね(通知)
[1] に関しては 1 コミットで Math 全体あるいは CMath 全体をやっちゃってよいものでしょうか?
とりあえずこちらだけ。 全体で大丈夫ですー。たぶん1メソッドごとにrevertしたい事はないかと思いますので。
わかりましたー
[1] の作業の際,行末スペースの削除は同じコミットに含めちゃっても大丈夫でしょうか。 (エディターが行末スペースを自動削除してくれるので)
[1] の作業の際,行末スペースの削除は同じコミットに含めちゃっても大丈夫でしょうか。
はい。そこまで細かいものはrevertする事もそうないかと思いますので、やりやすいようにでいいかと思います。
残るは
[8] 定義域(引数の値の範囲)を正確に
のみとなりました。
これは例えば Math.sqrt
の引数が「正の実数」となっているような誤りを訂正する,ということです。
Math.sqrt
は当然 0
を与えることもできますし,Complex であれば負の実数(例:-1+0i
)も OK なようです。
実装を見ないといけないとすると,私の手に負えないので,どなたかにお願いしたいです。
rdoc の説明も間違っています(sqrt
の定義域が [0, INFINITY]
になってる)。
実験結果に基づいて訂正する,というのであれば私にもやれそうですが。