2012-05-17 131 views
0

傍晚。我有一个关于Java中的base-16计算的问题。我正在计算一个合理的算法pi到N个数字,并允许一些数字的限制(思考类似15-20)。最终,这只是稍后计算器的一个功能。以pi计算的基数16计算

我不是在寻找的精度荒唐的程度,我也不想与算法的帮助。我知道它有一个神奇的API方法,但我宁愿自己做。

式中:式Bailey–Borwein–Plouffe。据我所知,它以十六进制计算pi。

那么,我的问题是什么?我对Java并不擅长。我所采用的课程(直至并包括数据结构)实际上只使用我所知道的语言作为达到目的的手段,而不关注任何特定语言。 我想计算pi到十六进制的第n个数字,然后将该值转换为字符串用于显示目的。

上,与该启动有什么建议?我在java中编写代码的经验大约是20周,而我所困住的东西似乎是Java特有的东西。

如果我错了,在任何地方,通过各种手段指出来。我在这里学习。

+0

人们总是'的System.out.println(Double.toHexString(Math.PI));' – Bohemian

+0

作为对算法的维基百科的文章指出,它实际上是用于计算Pi的特定数字而不计算前面的数字。但_“该算法是计算第n位数字(或第n位邻域中的几位数字)的最快方式,但是当目标是计算从1到1的所有数字时,使用大数据类型的π计算算法仍然更快n。“_ –

+0

我对大数据类型不感兴趣(目前)。较小的数据类型是我的目标。 –

回答

1

我会实现使用BigDecimal第一当前的algorithim。当这部作品让您满意,你可以看看更换功能提供的BigDecimal(假设你想要写你自己的)

+1

是的,它看起来像这可能是最好的方式去做这件事。感谢您的建议。 –

1

我不知道的什么可以帮助你,但这里是我的建议。 由于您向我展示了一个公式,因此您可以使用RECURSION而不是使用while循环进行迭代。 代码例如:

public static int series(int a, int b, int loopCount) { 
    int sumTemp = a + b; 
    b = sumTemp; 

    loopCount--; 
    if (loopCount > 0) { 
     return series(a, b, loopCount); 
    } 
    else 
    { 
     return sumTemp; 
    } 
} 

public static void main(String[] args) { 
    int sum = series(5, 10, 3); 
    System.out.println("Sum = " + sum); 
} 

注:

  • 通知这个简单的公式的初始值是5和10功能系列总结在一个循环中的2个值。
  • 在我的系列函数中,新和存储在参数b中。由于Java是通过值传递的,而不是引用,所以这种技术被强加给我。
  • 参数loopCount跟踪循环#。
  • 最后,变量sum是返回的值。

最后,使用Math.pow函数为16进行功率计算。 Math类对您的学习非常有用。

祝你好运,

汤米Kwee

+0

为什么我想要在迭代时完成函数调用的递归开销? –

+1

公平的问题。如果你对迭代感到满意,那就用它来代替。当您需要利用堆栈结构或LIFO时,递归技术是很好的。但是,既然你现在是一名学生,我认为熟悉递归和编码以及何时使用它是个好主意。学习递归比迭代花费更多的时间。 –

+1

尽管Java没有tail-call优化,但递归精灵的执行速度比迭代慢。 – karatedog