簡體   English   中英

從左到右和從右到左計算諧波總和的不同值

[英]Different values in calculating harmonic sum from left to right and right to left

在兩個方向上計算從1到50000的java中的數字的諧波總和時,獲得的值必須匹配,但令我驚訝的是它們不匹配! 請告訴我為什么會這樣。

public class Main {
    public static void main(String args[]){
        int maxD = 50000;
        double suml2r=0, sumr2l=0;
        for(int i=1; i<=maxD; i++){
            suml2r += (double)(1)/i;
            sumr2l += (double)(1)/(maxD-i+1);
        }

        System.out.println("left to right = " + suml2r);
        System.out.println("right to left = " + sumr2l);
    }
}

輸出:
從左到右= 11.397003949278504
從右到左= 11.397003949278519

浮點數不精確! 在從右到左的總和中,您是從最小到最大相加,而最低有效余數會發生變化,這與從左到右的總和不同,尾數的較長部分需要刪除,以使最小的數量增加。 為什么要對相等的浮點值進行相等檢查通常不是一個好主意,這是有原因的。

在對您的double值求和后應用不同的舍入和舍入會產生這些結果。 如此處所述如果精度應該准確,則可能應使用BigDecimal

暫無
暫無

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

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