exp_ps()
の実装をhttp://gruntthepeon.free.fr/ssemath/sse_mathfun.hまたはexp256_ps()
からhttp://software-lisc.fbk.eu/avx_mathfun/avx_mathfun.hまで理解しようとしています。
定数cephes_exp_C2
がどのように決定されるかを除いて、計算のほとんどすべてを理解しています。計算の精度が向上すると思われます。計算から除外された場合、結果として得られる関数は、はるかに速く、精度はわずかです(相対誤差は+/- 10前後の値に対して1%以下です)。そのような係数は他の数値ライブラリーでも見つかりましたが、詳しい説明はありません。exp()関数の数値計算における一義義者
-1
A
答えて
2
Cephesソースから検索すると、Pommierの翻訳に誤りがあると思います。 Pommierのコードでエラーが発生したのは初めてです。 Gromacsに数学ライブラリを使用することをおすすめします。
Cepheの中exp.c
から
、
static double C1 = 6.93145751953125E-1;
static double C2 = 1.42860682030941723212E-6;
....
px = floor(LOG2E * x + 0.5);
n = px;
x -= px * C1;
x -= px * C2;
Pommier、
_PS_CONST(cephes_exp_C1, 0.693359375);
_PS_CONST(cephes_exp_C2, -2.12194440e-4); <-- Wrong value
....
//
// fx = LOG2E * x + 0.5
//
fx = _mm_mul_ps(x, *(v4sf*)_ps_cephes_LOG2EF);
fx = _mm_add_ps(fx, *(v4sf*)_ps_0p5);
//
// fx = floor(fx)
//
emm0 = _mm_cvttps_epi32(fx);
tmp = _mm_cvtepi32_ps(emm0);
v4sf mask = _mm_cmpgt_ps(tmp, fx);
mask = _mm_and_ps(mask, one);
fx = _mm_sub_ps(tmp, mask);
//
// x -= fx * C1;
// x -= fx * C2; (Using z allows for better ILP in this step)
//
tmp = _mm_mul_ps(fx, *(v4sf*)_ps_cephes_exp_C1);
v4sf z = _mm_mul_ps(fx, *(v4sf*)_ps_cephes_exp_C2);
x = _mm_sub_ps(x, tmp);
x = _mm_sub_ps(x, z);
+0
cephesライブラリへのリンクをありがとう、それは基本的な数学関数の実装の研究のためにはるかに良いです。しかし、私はまだC2が良いのか分かりません。 e^xは次のように変換される。e^x = e^g^n = e^ge ^(nloge(2))= e ^(g + nloge(2))=> x = g + )。 nはfloor/round関数で計算され、x - = px * C1はg = x - n loge(2)(C1 == loge(2))と等価です。 x - = px * C2で計算されるものは?それは何とか精度を高めるために浮動小数点数に関連していますか? – faramir
関連する問題
- 1. 関数の定義におけるペアになった変数
- 2. パンダのデータフレームにおけるkmeansの損失関数の計算
- 3. 別のテンプレート関数の定義における関数のパラメータタイプのアンパック
- 4. 乗算定義関数
- 5. 定数定義における連結
- 6. Oracle SQL開発者のユーザー定義集計関数
- 7. VBAでArcSin関数を計算/定義する方法は?
- 8. 年齢ブラケットを計算するSQL Serverユーザー定義関数
- 9. 'create'の関数定義値
- 10. スカラ関数変数:デフォルト値を使用する(関数定義または変数定義で定義する)
- 11. 残りの演算子と関数演算子を関数定義に一緒に使用する方法は?
- 12. JavaScript関数の定義/実行における引数の名前/値を調べる
- 13. DB2ユーザー定義関数およびカスタムスキーマ
- 14. 3つのユーザー定義関数を使って数値の真の平方根を計算する方法
- 15. exp、bias、およびfractの大小を計算する
- 16. 計算最小及びKDBのテーブルにおける各変数の最大値
- 17. float変数のテンソルフローにおけるfftの計算エラー
- 18. fminconの目的関数と制約関数の単一計算
- 19. 浮動小数点計算における誤差の推定
- 20. VBAにおけるネットワーク日数の計算
- 21. 2の補数におけるx&(-x)の意義?
- 22. 関数定義
- 23. 関数定義{}
- 24. ライブラリ関数のerrno値の定義
- 25. 関数定義での値の使用
- 26. 教義における多くの関係の順序づけ?
- 27. 関数を返す '未定義' の値
- 28. ループ、Python、一連の変数と関数を定義する
- 29. 関数ifelse計算
- 30. semi-log空間におけるスプライン関数の数値積分
コードから?試み?例? –
この定数は 'exp(C2)'です。ここで 'C2'は他の定数です。あなたは本当に他のすべてを理解していますか?例えば。 'cephes_exp_p0'とは何ですか? – user463035818
あなたは[mcve]を表示していないだけでなく、2つのリンクを1つのテキストにダンプするだけでなく、**特定の**質問もありません。それはどのように動作するのではありません。 3年後、あなたは本当に知っているべきです! – Olaf