タグ付けされた質問 「computer-arithmetic」

2
除算が他の算術演算よりもはるかに複雑なのはなぜですか?
最近、欠けているチップ(ARM Cortex-A8)で整数除算が必要なケースに遭遇しました。なぜそうなのかを調査しようとすると、一般的に、ほとんどすべての整数(または固定小数点)アーキテクチャで、除算が加算、減算、または乗算よりもはるかに多くのサイクルを要することがわかりました。これはなぜですか?他のすべての2層AND-ORロジックでは表現できないのですか?

4
浮動小数点演算で、小さな用語を大きな用語の差に追加すると、数値の不正確さが生じるのはなぜですか?
私は、アレンとティルデスリーによる「液体のコンピューターシミュレーション」という本を読んでいます。71ページ以降、著者は分子動力学(MD)シミュレーションでニュートンの運動方程式を統合するために使用されるさまざまなアルゴリズムについて説明します。78ページから、著者はVerletアルゴリズムについて議論します。これはおそらくMDの標準的な統合アルゴリズムです。彼らは述べています: おそらく、運動方程式を統合する最も広く使用されている方法は、Verlet(1967)によって最初に採用され、Stormer(Gear 1971)に起因するものです。この方法は、二次方程式の直接解であるmir¨i=fimir¨i=fim_i \ddot{\textbf{r}}_i = \textbf{f}_i。方法はpostionsに基づいてr(t)r(t)\textbf{r}(t)、加速度a (tで)、そして位置rを(T - δ T )前のステップから。位置を進める方程式は次のようになります。a(t)a(t)\textbf{a}(t)r(t−δt)r(t−δt)\textbf{r}(t - \delta t) r(t+δt)=2r(t)−r(t−δt)+δt2a(t).(3.14)(3.14)r(t+δt)=2r(t)−r(t−δt)+δt2a(t).\tag{3.14}\textbf{r}(t + \delta t) = 2\textbf{r}(t) - \textbf{r}(t - \delta t) + \delta t^2 \textbf{a}(t). eqn(3.14)について注意すべき点がいくつかあります。速度がまったく表示されないことがわかります。についてテイラー展開によって得られた方程式を追加することにより、それらは削除されました。r(t)r(t)\textbf{r}(t) r(t+δt)=r(t)+δtv(t)+(1/2)δt2a(t)+...r(t+δt)=r(t)+δtv(t)+(1/2)δt2a(t)+...\textbf{r}(t + \delta t) = \textbf{r}(t) + \delta t \textbf{v}(t) + (1/2) \delta t^2 \textbf{a}(t) + ... r(t−δt)=r(t)−δtv(t)+(1/2)δt2a(t)−....(3.15)(3.15)r(t−δt)=r(t)−δtv(t)+(1/2)δt2a(t)−....\tag{3.15}\textbf{r}(t - \delta …

4
確定的モデルの実行での小さく予測できない結果
私はかなり大きなモデル(約5000行)をCで記述しています。これはシリアルプログラムであり、乱数の生成はどこにもありません。FFTを使用する関数にFFTWライブラリを使用します。FFTW実装の詳細はわかりませんが、その中の関数も確定的であると想定しています(エラーが発生した場合は修正してください)。 私が理解できない問題は、同じマシン(同じコンパイラ、同じライブラリ)での同一の実行の結果に小さな違いがあることです。 私は、倍精度変数を使用して、変数に結果を出力するvalue例えば、私が発行します fprintf(outFID, "%.15e\n", value);か fwrite(&value, 1, sizeof(double), outFID); そして、私は常に次のような違いを得るでしょう: 2.07843469652206 4 e-16対2.07843469652206 3 e-16 私はこれがなぜなのかを理解するために多くの時間を費やしてきました。私は最初、メモリチップの1つが故障していると思っていたので、注文して交換しましたが、役に立ちませんでした。その後、同僚のLinuxマシンでコードを実行してみたところ、同じ性質の違いが生じました。 何が原因でしょうか?今は小さな問題ですが、「氷山の一角」(深刻な問題)なのでしょうか。 数値モデルを扱う誰かがこの問題に遭遇した場合に備えて、StackOverflowの代わりにここに投稿すると思いました。誰かがこれに光を当てることができれば、私は多くの義務があります。 コメントの フォローアップ: Christian ClasonとVikram:まず、私の質問に関心をお寄せいただきありがとうございます。あなたがリンクした記事は、次のことを示唆しています:1.丸め誤差は精度を制限し、2。異なるコード(一見害のない印刷ステートメントを導入するなど)がマシンのイプシロンまでの結果に影響を与える可能性があります。効果fwriteとfprintf機能を比較していないことを明確にすべきです。どちらか一方を使用しています。特に、両方の実行で同じ実行可能ファイルが使用されます。fprintfOR を使用しているかどうかに関係なく、問題が発生すると単に述べていfwriteます。 したがって、コードパス(および実行可能ファイル)は同じであり、ハードウェアも同じです。これらすべての外部要因が一定に保たれている場合、基本的にランダム性はどこから来るのでしょうか?不良メモリがビットを正しく保持していないためにビットフリップが発生したのではないかと疑ったので、メモリチップを交換しましたが、これは問題ではないようです。私のプログラムは、1回の実行で数千のこれらの倍精度数値を出力します。ランダムなビットフリップを持つランダムな握りが常にあります。 クリスチャンClasonの最初のコメントへのフォロー:なぜマシンの精度内で0と同じ?doubleの最小の正の数は2.22e-308なので、0に等しくないはずです。私のプログラムは10 ^ -16の範囲(1e-15から8e-17の範囲)で数千の値を出力し、私たちの研究プロジェクトには意味のある変化が見られたので、無意味なものを見ていなかったと思います番号。2 ⋅ 10− 162⋅10−162\cdot 10^{-16} フォローアップ#2: これは、コメントでの派生的議論を支援するために、モデルによって出力された時系列のプロットです。

3
高速に計算されます、
どちらがより高速に計算されるかまたはlog a cまたはbababa^bログacloga⁡c\log_a c?a、b、cはb>c√bcb\sqrt[b]{c}aaabbbcccです。b > 1b>1b>1 比較にはどのようなアルゴリズムを使用しますか?それらの複雑さは何ですか? 例えば、又はC ≈ BC ≡ Abc≡abc \equiv a^bC ≈ Abc≈abc \approx a^b この質問は、数学スタック交換質問へのコメントに触発されました。階乗へのスターリングの近似の目的は何ですか?。特に、mjqxxxx、トーマスアンドリュース、そして私が残したコメント。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.