2012-01-24 5 views
4

私はスピードと正確さの点で良い記述をしたいと思います。私が正しく覚えていれば、b=(a+1)*aはこれより良いプログラムを作ります:b=(a^2+a)科学的なプログラミングの慣行

これは単なる例ですが、間違っているかもしれませんが、問題はありません。問題は次のとおりです。私は科学計算の良いプラクティスの概要をどこで見つけることができますか?

+1

私は読みやすさを目標にしています。最適化は、それが十分ではないという証拠がある場合にのみ指摘されます。コンパイラはあなたのために多くを行います:) – RvdK

+2

残念なことに、読みやすさの隣にある数字の安定性を考慮する必要があります。その場合は、読み込み可能なバージョンをコメントに入れる必要があります。 – Bort

+1

'a^2'と' a * a'は同じものではありません。 –

答えて

5

Numerical Recipes in Cから見ることができます。私はそれがあなたに最適化を導入したり教えてくれるかどうかはわかりませんが、C言語の科学計算が行われている限り、非常に人気のある本です。 C++の本もあります。

+2

最新版はC++用です。 http://www.amazon.com/Numerical-Recipes-3rd-Scientific-Computing/dp/0521880688/ref=sr_1_1?ie=UTF8&qid=1327417693&sr=8-1 –

+0

@Zhenya:Excellent!私はこのようなものを最長の時間探しています。 – Samaursa

+1

Numerical Recipesは私のお気に入りの素晴らしい本ですが、その主な焦点は、コンピュータ上の線形代数、FFTのようなアルゴリズム、特殊関数の作成、普通微分方程式や偏微分方程式の解法などです。あなたの質問についての本だと思ってください。 – duffymo

3

あなたがここでやっていることは、premature optimizationと呼ばれ、多くの悪の根です。あなたがしなければならないことは、あなたのプログラムを書いてから、profileそれらを作り、重要な部分を最適化しようとすることです。科学的コンピューティングの最適化テクニックに関する完全な概説は非常に厚い本ですので、解決策を探す前に問題を絞り込む必要があります。

+2

-1あなたはここでポイントを逃したようです - 実践の大部分は、「スピードと正確さ」の正確さの部分と関係しており、プログラムが正しい結果を出すことを確実にする時期尚早の最適化ではありません。 –

+0

確かに。時期尚早の最適化は一つのことです。 (_適切なデータ構造を使用し、正確で正しい数学的出力を生む)_correct_プログラムを作る代わりに注意深い初期設計を避けることは全く別のことです。バランスを取る必要があります。私は、この質問のどの辺が落ちているかについて完全には分かっていません。 –

+1

+1 @LightnessRacesinOrbit私はあなたが上記のものに同意します。数値的な安定性などに関しては、合理化が必要であることが示されるまで事を可能な限り単純に保つことは良い考えです。鍵は、自分自身でコードを作成しようとするのではなく、あなたが望むほとんどのものをすでに提供している数値的な専門家に頼ることが最も多いです。例えば@ Sriramによる回答 –

1

便利なテクニックの1つは、すべての関数テンプレートをデータ型で作成し、浮動小数点型ではなく区間算術型でアルゴリズムを実行することです。これにより、広範な数値解析を行うことなく、与えられた入力セットに対する結果の精度の上限が得られます。

あなたの結果や中間体の予想される規模を知ることも重要です。何か間違っているかどうかをすぐに知ることができます。

0

これは、通常の「時期尚早最適化」の議論ではありません。パフォーマンスに関するものではありません。正確さが問題です。私はOPに同意する - それは非常に注意を払う価値がある。

注目すべき最大のものはaccumulation of rounding errorです。

あなたは前にあなたができる場合は、それらを追加することに昇順に配列をソートする必要があります:あなたはWhat Every Computer Scientist Should Know About Floating Point Arithmetic

を読む必要が

http://www.codeproject.com/Articles/25294/Avoiding-Overflow-Underflow-and-Loss-of-Precision

:あなたはこのヘルプを見つけるかもしれない

http://www.ibiblio.org/pub/languages/fortran/ch4-9.html

関連する問題