青山です。

On Wed, 14 Jun 2000 04:07:09 +0900 (JST),
gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

> いや,Mathematica には二つの有効桁が同時にあって,全体の有効
> 桁数はPrecision,小数点からの桁数はAccuracy と言います.これ
> らはオブジェクトごとにもつ量で演算の際に適切に管理されます.
> 
> んで,問題は指定した小数点以下の桁での丸めはどう扱うですかで
> すが,Mathematicaの場合はSetAccuracyを使います.
> 
> In[1]:= SetAccuracy[123456 10^-3, 2]
> Out[1]= 123.5

なるほど。これはいいですね。BigFloat は、この2つの基準を持つという方
向でどうでしょう?

> ぼくが懸念するのは,有効桁の管理をユーザに任せるくらいなら,
> 丸め機能もユーザに任せればいいんでわ?? という点です.僕は数
> 値の精度にはうるさい方ですが,観測値の有効桁数なんてのを扱う
> 場合は誤差論の教科書とかひっくり返さないとナイーブな計算は出
> 来ないです.そういう難儀なモノをFloatに与えてよいかという議
> 論は要求がもう少し具体的でないとちょっと検討しにくいです.
> 
> もしかして num/round.rb とか言うのを標準で配布するとか言う線
> でしょうか?? それならアリとは思うのですが,言語機能として迂
> 闊なものを付け加えるのは避けたいといった気分なのです.

なるほど。私としては、やはり、電卓、Excel などからも、ceil, floor より
も需要はありそうで、かつ ceil, floor が標準であるという事は、round_up,
round_down も標準であってはどうか、という感じです。

ちょっと切捨てをしようかな、と、マニュアルをながめたとき、floor を見付
けたら、やはりそれを使いたくなりますよね。ですが、実は floor は、C な
どでの floor の動きで、負数においては、切上げというか、電卓などの切捨
てとは違うわけですよね。

これはあまり親切ではないというか、自然に予想外の動きをするスクリプトを
生み出す可能性があるように思われます。従って、ceil, floor があるという
事自体が、すでにそのような潜在的な問題を含んでいるように思われるので、
対策としても、round_up, round_down もあるべきではないかと。

もっとも、単純に、マニュアルにそのような注意書きを加えるという対策もあ
ります。ですが、これはさすがに不親切ですから、せめて、num/round.rb も
用意というあたりまでは欲しいですね。

また、おそらくは ceil, floor も、C にあるからという惰性で入っているだ
けでしょうから、これも含めて num/round.rb にという手もあるかと思います。

1.7 で num/round.rb 添付。2.0 へ向けて、ceil, floor を num/round.rb に
移動という感じとか。

で、やはり、ruby-math まである Ruby ですから、2.0 あたりでは、BigFloat
も標準で欲しいかも。

まあ、しかし、標準ライブラリの選択で悩むよりも、Debian の apt-get や
Perl の CPAN モジュールのような、RAA からのインストールを手軽に行なう
手段を提供する方がより良いでしょうね。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>