Значения gmpy2 mpfr ограничены 301 033 цифрами, из которых правильными являются 301 032 цифры - PullRequest
1 голос
/ 26 сентября 2019

Я пишу Python3 (64-разрядную) программу для вычисления числа не менее миллиона цифр с использованием модуля gmpy2 в 64-разрядной Windows 10. Я использую алгоритм Чудновского.Арифметика серии гениальна, проста в применении и проста в реализации.У меня проблема с представлением вещественных чисел очень большой точности с помощью gmpy2.

Я свел эту проблему к очень простому тесту.

  1. Проверьте системные ограничения gmpy2.Они выглядят великолепно.
  2. Задайте контекст точности, необходимый для числа с пиром в миллионах.
  3. Присвойте строковую переменную с числом цифр в пи.
  4. Присвойте переменной mpfr преобразование строкиспользуя mpfr ('миллионная цифра числа пи')
  5. Распечатайте строковую переменную, она имеет миллион цифр.
  6. Напечатайте mpfr, который имеет чуть более 300 000 цифр.

Когда я конвертирую mpfr в строку и печатаю, я получаю аналогичные результаты.

Что здесь происходит, и как мне выжать точность в миллион цифр из gmpy2?

    import gmpy2                # Get the gmpy2 library

    print('max_precision =', gmpy2.get_max_precision())
    print('emin_min =', gmpy2.get_emin_min())
    print('emax_max =', gmpy2.get_emax_max())

    gmpy2.get_context().precision = 1000000 + 3   # Set the precision context.
    print(gmpy2.get_context())

    million_string = 'million digits of pi. I didn't paste it here but you can get it from Eve Andersson's website here, http://www.eveandersson.com/pi/digits/1000000, you'll need to strip out the newlines'

    print('string =', million_string)

    million_pi = gmpy2.mpfr(million_string)

    print('\n\nHere comes the mpfr...\n\n')
    print(million_pi)

В моих выходных данных я получаю напечатанные max, mins, context, строку pi из миллиона цифр и первые 300 000 (дать или взять) цифр числа pi.Я бы хотел показать вам именно вывод, но система обвиняет мой красиво отформатированный вывод в коде и не позволит мне сделать это.Я не могу найти способ обойти это.

1 Ответ

0 голосов
/ 29 сентября 2019

Точность указывается в битах, а не в десятичных цифрах.Требуется log(10)/log(2) бит на десятичную цифру.1 000 003 бита будут давать 1000003*log(2)/log(10) или примерно 301 030,9 точных десятичных цифр.

...