From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1999-03-01T23:59:37+09:00 Subject: [ruby-dev:5852] Re: Precision in Mathematica (Re: Bigfloat) けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :5842 ] the message: "[ruby-dev:5842] Re: Precision in Mathematica (Re: Bigfloat) ", on Mar/01 19:34(JST) GOTO Kentaro writes: >ごとけんです >>keiju> >keiju> 1. 四則演算は厳密に精度を計算し, 関数系は引数の精度までを引き継ぐ >>keiju> >keiju> 2. 今迄通り精度は大きい方に合わせていく(float系の場合) >>keiju> >keiju> 3. Mathematicaに頑張って合わせる >>keiju> >1. についてですが、これは『関数は引数の精度と同等の精度を >>keiju> >得られる事が期待できるアルゴリズムを使用せよ』 >>keiju> >と読み取って良いのでしょうか?(物によってはメチャ厳しい ^^;;) >>keiju> >>keiju> そうじゃなくて, 大変なんであきらめるってことです(^^;;; >> >>永久に返って来ないより、なんぼかましですね ^^;; >> >>既に Bignum ** Bignum のように、時間に対する問題に関しては >>なにがなんでも値を求めるのでなく、実行時間配慮する方向で >>態度が決まってると考えています。 >>#どのへんで、あきらめるかは問題ですが、 > >いや,Bignum は時間がかかっても計算させたほうが >いいんではないかと思ってます.実装の仕方によるけど >そんなに時間かからないんじゃないかなぁ. >四則演算は最大誤差を別個に評価して,仮の結果と最大誤差を >足して変化しない桁を調べればいいんではないかと. >関数と言っても,四則演算の級数か,ニュートン法でであらわ >すんだから,引数の精度のうちで最小のものを使って必要な >項や収束条件は求まるから問題ないような. >あ,ニュートン法は危険かも. うーん... Rubyでそこまでする必要があるかというのもないでもないですが... 実行コストもありますが, 実装するのが大変になるのはちょっと... >>keiju> >案外 3. が上の解釈の 1. そのものだったりして、、、 >>keiju> うーん. どうなんでしょう? >> ごとけんさん? > >ぼくは,1. をいまいち理解してなかったけど, >とりあえずは Math モジュールの関数は prec(Float) を呼ぶと >言うことでいいんではないでしょうか?? それもありですね(^^;;; >>keiju> expの精度がどのように変化するのか興味ありますね. >> >>exp がそうだかわかりませんが、機械の浮動小数点で同じ関数を >>実行して、第一近似を得て適当な精度になるまでトライする >>という手法が使えそうです。 > >exp って,指数関数のことですか?? そうです. でも, 忘れて下さい. 勘違いしていました(^^;;; それはともかく第4の案. 昔出した案ですが, 1. 同じ精度同士の2項演算はその精度を持つ 2. 単項演算はそのまま 3. 違う精度の2項演算は精度のの悪い方に合わせる というものです. 大部いい加減なルールなのですが, 今はまだ合意がとりやすいかなと(^^;;; この案を出す理由は以下の2つです. 1. 実際に, ユーザがBigfloatを使う時は, 精度を予め決めて使うことが多い はず. 2. その場合には, 常に固定の精度を持つというモデルは, それなりに分かり やすい(Mathematicaの機械精度の場合と同じ) 3. そういうモデルにおいて違う精度の数が来た場合, 小さいモデルに移行す る. というのも, それほど違和感はない(Mathematicaの機械精度の場合と 同じ) 1の前提がありますが, 実用上それほど問題ないと思うのですが, いかがでしょ う? __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---