Как преобразовать алгоритм Бэйли Борвейна Плуффа из шестнадцатеричного в десятичное? - PullRequest
0 голосов
/ 06 июня 2018
def S(j, n):
    k = 0
    s = 0
    left_sum = 0
    while (k <= n):
        denominator = 8k + j
        numerator = pow(16, n-k, denominator)
        left_sum = (left_sum + (numerator / denominator)) % 1.0
        k += 1
    right_sum = 0
    k = n + 1
    newt = 0
    while 1:
        numerator = pow(16, n-k)
        denominator = 8k + j
        check = numerator / denominator
        right_sum = newt + check
        if right_sum == check:
            break
        else:
            newt = right_sum
        k += 1

    result = left_sum + (right_sum % 1.0)
    return result


def pi(n):
    n -= 1
    x = (4*S(1, n) - 2*S(4, n) - S(5, n) - S(6, n)) % 1.0

Я пытаюсь найти n-ую цифру числа пи, используя алгоритм Бэйли Борвейна Плуффа.Поскольку алгоритм использует шестнадцатеричный код, мне нужно преобразовать его обратно в десятичный.Я нашел некоторый код на скрипте Python, который, кажется, делает это правильно:

return "%014x" % int(x * 16**14)

Может кто-нибудь объяснить, что делает этот оператор возврата?Спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

Не преобразуется в десятичную.Во всяком случае, он преобразует десятичное значение в шестнадцатеричную строку.

Это форматирование строки , обычно используемое для вывода.Спецификация формата находится слева, перед разделителем %;значение справа.

Значение: x * 16**14 равно x, смещено влево на 14 шестнадцатеричных цифр.

Формат: %...x указывает шестнадцатеричное без знака.014 указывает минимум 14 столбцов с нулевым заполнением.

Полученная строка возвращается вызывающей программе.


Чтобы преобразовать в десятичное число, вам необходимо

  1. Исправьте ваш опубликованный код.Здесь все еще есть синтаксические ошибки.
  2. Измените базовый код с шестнадцатеричного на дек.Это начинается с изменения базы питания с 16 на 10.

Если вы застряли, вы можете сообщить о своей проблеме кодирования.В этом случае, пожалуйста, прочитайте и следуйте инструкциям публикации в справочной документации, как это было предложено при создании этой учетной записи. Минимальный, полный, проверяемый пример применяется здесь.Мы не сможем эффективно помочь вам, пока вы не опубликуете свой код MCVE и точно не опишите проблему.
Мы сможем вставить ваш опубликованный код в текстовый файл и воспроизвести описанную вами проблему.

...