1

しばらくの間double-double 算術の論文とソース コードをたどっていますが、 dd_real ( として定義されているstruct dd_real { double x[2];...}) 数値が 2 つの double にどのように分割されるかはまだわかりません。文字列で初期化すると、 と はどうdd_real pi = "3.14159265358979323846264338327950";なるでしょうか? 私はそれを理解し、できればそれを行う小さな Python 関数を作成する必要があります。pi.x[0]pi.xi[1]

QD ライブラリを呼び出したくない理由は、Python で正しい分割を再実装して、35 桁の精度定数 (文字列として指定)double2を CUDA コードに送信することを好むからです。 GQD ライブラリによって double-double reals として扱われます。これは、CUDA で拡張精度計算を処理する唯一のライブラリのようです。残念ながら、Python 側では mpmath も除外されます。

4

1 に答える 1

5

double double2進数で初期化するとします。

1.011010101111111010101010101010000000101010110110000111011111101010010101010
  < ---                 52 binary digits         --- >< --- more digits --- >

次に、一方doubleがに1.0110101011111110101010101010100000001010101101100001 なり、もう一方がになります1.1011111101010010101010 * 2^-53

これらの2つの数値を(実数として)加算すると、合計が初期値になります。最初のものは、52ビットの仮数にできるだけ多くのビットを詰め込みます。2つ目は、適切な指数とともに残りのビットを含みます。

于 2012-03-25T03:58:16.410 に答える