簡體   English   中英

如何提高Java中第n個根算法的精度?

[英]How can I increase the precision of this n-th root algorithm in Java?

我正在嘗試在不使用Java中任何預定義函數的情況下為大量數字實現第n個根算法。 沒有sqrt,pow,abs,什么都沒有。

限制為:1.該數字最多可以為17位數字。 2.根的順序可以為2到10。3.結果的精度應為10個小數點左右。

這可行嗎?

我已經閱讀了許多有關第n個根算法,牛頓方法和其他迭代方法的類似問題的答案,但是其中大多數使用pow,abs,sqrt或其他預定義函數。

我得到的仍然具有預定義的功能,這是我在受到其他帖子的啟發后想到的:

public static double getRoot3(double number){
    double guess = 2;
    double possibleRoot = Math.abs((guess*guess)-number);
    while(possibleRoot> 0.009 ){
        possibleRoot = Math.abs((guess*guess)-number);
        guess = ((number/guess)+guess)/2.0;
    }
    return guess;
}
public static void main(String[] args) {
    double number = 12;
    double result = getRoot3(number);
    System.out.println("Number: " + number);
    System.out.println("Square root of " + number + ": " +result);
    System.out.println("Test: " + result * result );
}

該測試使用硬編碼的數字:12,結果如下:

  • 編號:12.0
  • 12.0的平方根:3.4641016200294548
  • 測試:12.000000033890693

這樣就可以了,我得到了7個浮點數的精度,但是如果我嘗試通過在while條件中添加零來提高精度,則它會中斷。

我試圖對其進行故障排除,並且似乎“ possibleRoot”在某個數字中突然包含一個E,並且條件評估為false。

如何提高精度,如何將其擴展到立方或更高的其他根? 此功能目前僅適用於平方根。

通過使用BigDecimal,您將避免出現double / float精度問題,請參閱Java中BigDecimal的平方根

我認為您不會更加精確。 Java和其他語言確實存在“浮點問題”。 這意味着,每當您使用浮點數/雙精度數時,它都會與原始數字略有不同。 那是由於代表內存中數字的限制。

同樣,“ E”表示必須將其左側的數字乘以10 ^ x,其中x是“ E”的右側數字。 當數字顯示太多時,會發生這種情況。 例:

125.34E3

= 125.34 * 10 ^ 3

= 125.34 * 1000

= 125340.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM