2011-08-17 8 views
0

ダブルタイプIを使用して、Cubic Spline Interpolation Algorithmを作成しました。 その仕事は成功したようでしたが、非常に小さな値を計算すると6%前後の相対的な誤差がありました。C++数値解析正確なデータ構造ですか?

正確な科学的数値解析には2倍のデータ型で十分ですか?

答えて

6

Doubleには、ほとんどのアプリケーションで十分な精度があります。もちろんそれは有限ですが、不正なアルゴリズムを使用することによって、常に精度のあらゆる量を浪費することが可能です。実際、それはあなたの最初の容疑者でなければなりません。あなたのコードを見て、丸め誤差が必要以上に速く蓄積するようなことをしているのか、お互いに非常に近い値を減算するような危険なことをしているのかを見てください。

+0

右それはアルゴリズムの問​​題でした。私はちょうどアルゴリズムを変更して、私はデータを改善しました。新しいアルゴリズムで長いdouble型を使うと、より正確なデータを得ることができます。 – webnoon

0

あなたのニーズに合わせて2倍であれば、作業している数字のタイプによって異なります。ヘニングが示唆しているように、使用しているアルゴリズムを見て、数値的に安定しているかどうかを確認するのが最善の方法です。

ここでは、追加アルゴリズムとして、Kahan summation algorithmを紹介します。

1

科学的数値解析は難しいので、私はそれを専門家に任せています。あなた自身で書くのではなく、数字のライブラリを使うことを考えましたか? Eigenは私の現在のお気に入りです:http://eigen.tuxfamily.org/index.php?title=Main_Page

補間に関する優れた章を持っている数値レシピ(nr.com)の最新のコピーは、いつも手元にあります。 NRには限定的なライセンスがありますが、作者は自分が何をしているのかを知っていて、各数値技術について簡潔な書き起こしを提供しています。ご覧になる他のライブラリには、ATLASとGNU Scientific Libraryがあります。

あなたの質問にお答えするには、ほとんどの科学的アプリケーションで十分であるはずですが、私はこれまでのポスターにアルゴリズムの問​​題が似ていることに同意します。使用しているアルゴリズムのコードを投稿することを検討しましたか?

関連する問題