ごとけんです

In message "[ruby-math:00328] Re: Float#ceil, Float#floor, Float#round"
    on 00/06/14, Wakou Aoyama <wakou / fsinet.or.jp> writes:
>C では double ですが? なので、Float で返しても良いかなと思ったのです
>けれど。

おっと,そうでした.まぁCの場合は,doubleを引数に取ってintを返す
関数が(たしか)無くて,なおかつ,底による誤差を抜きで整数をdouble
で表現できますから…(いいわけ ^^;;;;

>Mathmatica, BigFloat は、頭からの桁数による、いわゆる有効桁数による計
>算ですよね? これに対して、電卓や Excel などのまるめは、小数点からの桁
>数を中心としたものです。

いや,Mathematica には二つの有効桁が同時にあって,全体の有効
桁数はPrecision,小数点からの桁数はAccuracy と言います.これ
らはオブジェクトごとにもつ量で演算の際に適切に管理されます.

んで,問題は指定した小数点以下の桁での丸めはどう扱うですかで
すが,Mathematicaの場合はSetAccuracyを使います.

In[1]:= SetAccuracy[123456 10^-3, 2]
Out[1]= 123.5

>この2つは相反するものですから、どちらかがあれば良いというわけにはいき
>ません。従って、ceil, floor, round 等は、それぞれに用意される必要があ
>ると思います。

ええ,Mathematicaの場合もAccuracyとPrecisionはもちろん相互に
依存しますのでSetPrecisionというのもあります.

>まあ、BigFloat に、電卓モードというか、Excel モードというか、小数点か
>らの桁数によるまるめ機能という手もあるかとは思いますが。これが出来るな
>ら、内部 10 進計算という利点もありますから、困った時には BigFloat で、
>という方向もありですね。

ぼくが懸念するのは,有効桁の管理をユーザに任せるくらいなら,
丸め機能もユーザに任せればいいんでわ?? という点です.僕は数
値の精度にはうるさい方ですが,観測値の有効桁数なんてのを扱う
場合は誤差論の教科書とかひっくり返さないとナイーブな計算は出
来ないです.そういう難儀なモノをFloatに与えてよいかという議
論は要求がもう少し具体的でないとちょっと検討しにくいです.

もしかして num/round.rb とか言うのを標準で配布するとか言う線
でしょうか?? それならアリとは思うのですが,言語機能として迂
闊なものを付け加えるのは避けたいといった気分なのです.

-- gotoken