From: Nobuhiro Fujitaka Date: 2004-04-10T15:40:51+09:00 Subject: [ruby-list:39530] Re: int/int in Ruby2? 藤高です。 Rubyをデータベース処理や、CGIプログラムに良く利用しています。 数学計算はやりません。 > 1) モードで記号の取り扱いを変えるのは、ヤッパリ可読性の低下と、バグの > 温床なので避けたい。 記号は基本的な部分なので抵抗はありますよね。 ただ個人的には / の挙動が人間的で無いのには不満もあります。 将来的にモード切替は問題があるでしょうが、実験的に導入は良いと思います。 それができたら既存のコードの影響も調べられますので。 > 2) いわゆる、日常的な感覚での自動変換(int/int => Rational or int の > どっちかとか、都合のいいように変換とか)は、人間的であるがゆえに、 > 個々人のずれがあり、結局読みにくい(=人によってはびっくり)。 確かに個々人のずれはありますよね。 int/int => rational にしようがしまいが、どちらも「びっくり」する人がいる のだと思います。自分はどちらであろうが「びっくり」するかな?逆に言うとあ まり気にしません。精度が気になる時は実際に動かして調べれば良いだけの話か なと感じています。 こんな話題が出たので少し考えてみたのですが、「/ は整数除算だ」というのは、 C言語等、CPUに合わせる考え方ですよね。こういう考え方に慣れてはいますが、 心のどこかでわずかに違和感があります。単純に計算の誤差を普段から気にせず にプログラミングできたら素晴らしいなと感じます。 ■/ をデフォルトで整数演算する(思いつきで並べています) --- 理由 --- ・CPUの挙動がそうだから、言語実装もその方がやりやすい。 ・コストが低い ・Rationalに変換すると、簡単な計算でも凄い数になる事があるから。 [ruby-list:39520] ・今までそれを前提にしたプログラムの挙動が心配。 ・そういう言語が多いから、他の言語に移った時にも心理的負担が少ない。 ・自分はそれに慣れている。 ・伝統だから。 --- デメリット --- ・内部での数値の型を意識しないといけない。 ・いちいち変換の必要が生じる場合がある。 こうやって並べてみると、結局は皆さんも言われる様に、機械的な思考をするか、 人間的な思考をするかの問題が大きい様です。 (もちろん実際のプログラム上での問題はいろいろありますよね。) 個人的にこのデメリットは微妙ですが、なんだかかゆい感じがします。 実行時間のコストについては、本当に速度が欲しい場面では C言語でのライブラ リが比較的簡単に作成できます。多少、実行時間のコストを削って / を自動変 換すれば、長い目でみたら人間の思考コストは軽減される気がします。 (移行時期はもちろん面倒ですが) Rubyでは思考コストを追求し、C言語ライブラリで実行時間コストを補うのは、 バランスの面でも良いし、Rubyの本来のスタイルですよね。 #でもどこかで見た「Rubyは保守的である」というスタイルには矛盾するかな? ------ Nobuhiro Fujitaka fujitaka@kt.rim.or.jp