まつもと ゆきひろです

In message "[ruby-math:00131] Re: %  &  divmod() & remainder()"
    on 00/01/27, "Shigeo Kobayashi" <shigeo / tinyforest.gr.jp> writes:

|> で、最後に divmod ですが、以下のいずれが良いと思いますか。
|>
|>   * divは割った結果(小数点以下がゼロ)、modは残り[現状,Python]
|これは [ruby-list:20376] で提案したソース修正ですよね。

[ruby-list:20376]はFloatを特別扱いしているのであまり好みませ
ん。Float#divmod を定義する方向で考えてます。

|>   * divは整数、modは残り
|div はとてつもない Bignum になる可能性がありませんか?

割られる数がとてつもないBignumであればそうですよね。それはそ
れで問題はないと思いますけど。

|>   * div,modは整数[Perl]
|これは、C の div() 関数に似ていますが????

ええ、divmod はまず整数化した数に対しての処理であるという解
釈です。今と互換性はありませんが、それはそれで意味のあること
だと思います。

|> 整数にfloorやceilを付けるんですか? なんか変な気もします。
|>
|えっと、floor や ceil だけでなくみんなです。単に整数が来たら
|double に格上げして計算してくれると(型宣言のないRubyだけに)
|いいなと思うわけです。

つまり、floorやceilも含めてぜんぶ「数としてのプロトコル」に
含めるということなんですかね。数を統一的に扱えるというメリッ
トはありますが、なんか変な気もします。

型宣言がないからと言って(動的な)型に無頓着であるべきというわ
けではないと思います(小林さんはそうは言ってませんが)。Perlの
ような動的な型もあるんだかないんだかという言語とは違うわけで
すから。

# Perlは静的型言語であると主張する会、会員番号1番

|例えば、何かのテキストファイルに書かれた数値データを加工して
|読みこみ実行する時に eval() を用いる場合もあるかもしれません。
|で、数値データは 1.0 を 1 と書いてあることもけっこうあります。

うーん、evalを使うのはPython界隈ではよく使われる方法みたいで
すけど、個人的にはお勧めしません。Float()とかString#to_fを使
うべきではないでしょうか。

  "1".to_f #=> 1.0
                                まつもと ゆきひろ /:|)