двойная двойная точность с плавающей точкой как сумма двух двойных - PullRequest
1 голос
/ 25 марта 2012

После статей и исходного кода для двойной арифметики в течение некоторого времени я до сих пор не могу выяснить, как именно число dd_real (определенное как struct dd_real { double x[2];...}) делится на два двойных.Скажите, если я инициализирую его строкой, dd_real pi = "3.14159265358979323846264338327950";, что будет pi.x[0] и pi.xi[1]?Мне нужно понять это, а затем написать, надеюсь, небольшую функцию Python, которая делает это.

Причина, по которой я не хочу просто вызывать библиотеку QD, заключается в том, что я предпочел бы переопределить правильное разбиение в Pythonтак что я отправляю свои константы точности из 35 цифр (заданные в виде строк) как double2 в код CUDA, где он будет обрабатываться как 1012 * GQD библиотека - единственная библиотека, кажется, единственная библиотека, чтобы иметь дело с расширенными вычислениями точности в CUDA.К сожалению, это также исключает mpmath на стороне Python.

1 Ответ

5 голосов
/ 25 марта 2012

Скажите, что вы инициализируете double double двоичным числом:

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

Тогда один double будет 1.0110101011111110101010101010100000001010101101100001 а другой будет 1.1011111101010010101010 * 2^-53

Когда вы добавляете эти два числа (как действительные числа), сумма является начальным значением. Первый упаковывает как можно больше битов в свою 52-битную мантиссу. Второй содержит оставшиеся биты с соответствующим показателем степени.

...