2012-05-17 96 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