現世代Javaの動向 1
at TECH
684:デフォルトの名無しさん
08/05/26 11:29:58
>>654
> だから、BigDecimalでもうatanとかsinとか実装してるわけ。
> で、double(当然native sin呼び出しだろうけど)と比べるともたついて、sin(x)/xの積分とかに影響出るわけよ。
> sin値出すのに数百回、積分もいれて1000回以上のループは当たり前で。
>
> 例えば100ミリ秒に1000回以上のnewしまくりで遅いんだろうし(たぶん)、
> これなら外部ライブラリをjniで呼び出したほうが速いんじゃねってこと。
> jniはstackframe使えるし、newしまくりはないしな。
>
> 初めから有効精度固定なら固定少数とか外部ライブラリとか別の実装にするよ。
俺もBigDecimalに対応した三角関数の数値積分プログラムを作ったことがあるよ。
確かに計算に時間がかかるよ。
当時はMathContextがなかったから、BigDecimal#divide(BigDecimal x, int scale, int roundingMode)
の二つ目以降の引数やEPSの扱い、>>654の言うテイラー展開で項の数1000回というループを本当のところ何回にすべきかの扱いなどで
てこずったよ。そのためにいちいちクラスを作ったものだよ。
>>651
ちなみに、テイラー級数展開は、奥村晴彦の『Javaによるアルゴリズム辞典』に載っているが、
連分数展開にするとパフォーマンスが上がるぞ。恐らく>>654もそれらしき本か数値解析本を読んでいたんだろう。
連分数展開はオーダーが一気に改善されるし少ないオーダーで高精度を得られる。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5495日前に更新/239 KB
担当:undef