如何将Bailey Borwein Plouffe算法从十六进制转换为十进制?

时间:2018-06-05 23:18:14

标签: python hex string-formatting pi

private static void Main()
{
    foreach (string name in GetEmployeeFirstAndLastNames())
    {
        Console.WriteLine(name);
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}

我试图使用Bailey Borwein Plouffe算法找到pi的第n位数。因为算法使用十六进制,我需要将其转换回十进制。我发现一些关于Python小提琴的代码似乎正确地做到了这一点:

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

有人可以解释这个退货声明在做什么吗?谢谢。

1 个答案:

答案 0 :(得分:0)

这不会转换为十进制。如果有的话,它会将十进制值转换为十六进制字符串。

这是string formatting,通常用于输出。格式规范位于%分隔符之前的左侧;价值在右边。

值:x * 16**14x,左移14位十六进制数字。

格式:%...x指定无符号十六进制。         014指定最少14列,零填充。

结果字符串将返回给调用程序。

要转换为十进制,您需要

  1. 修复已发布的代码。这仍有语法错误。
  2. 将基本特定代码从十六进制更改为十进制。首先,将功率基础从16更改为10
  3. 如果您遇到问题,可以发布编码问题。在这种情况下,请按照创建此帐户时的建议阅读并遵循帮助文档中的发布准则。 Minimal, complete, verifiable example适用于此处。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您 我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。