亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

比較Java中相等性的雙精度值。

瀏覽:125日期:2024-04-25 13:40:56
如何解決比較Java中相等性的雙精度值。?

您可以嘗試使用10 -15數量級的增量值,但是您會注意到某些計算會產生較大的舍入誤差。此外,您進行的操作越多,累積的舍入誤差就越大。

一種特別糟糕的情況是,如果減去兩個幾乎相等的數字,例如1.0000000001-1.0并將結果與??0.0000000001進行比較

因此,幾乎沒有希望找到適用于所有情況的通用方法。您始終必須計算出在特定應用中可以期望的精度,然后如果結果比該精度更接近,則認為結果相等。

例如輸出

public class Main { public static double delta(double d1, double d2) {return Math.abs(d1- d2) / Math.max(Math.abs(d1), Math.abs(d2)); } public static void main(String[] args) {System.out.println(delta(0.1*0.1, 0.01));System.out.println(delta(1.0000000001 - 1.0, 0.0000000001)); }}

1.7347234759768068E-168.274036411668976E-8

間隔算術可用于跟蹤累積的舍入誤差。但是實際上,錯誤間隔過于悲觀,因為有時舍入錯誤也會相互抵消。

解決方法

我想從那些double在Java中使用原始相等性有更多經驗的人那里獲得一些建議。使用d1 ==d2兩次雙打d1,d2由于可能的舍入誤差而不夠。

我的問題是:

Java Double.compare(d1,d2) == 0在某種程度上處理舍入錯誤嗎?如1.7文檔中所述,0如果d1數值等于,則返回值d2。有人確定它們在數值上相等是什么意思嗎?

對某些增量值使用相對誤差計算,您會建議使用通用的增量值(不是特定于應用程序)嗎?請參見下面的示例。

以下是考慮相對誤差的用于檢查相等性的通用函數。delta您建議從簡單的+,-,/,*操作中捕獲大多數舍入誤差的價值是什么?

public static boolean isEqual(double d1,double d2) { return d1 == d2 || isRelativelyEqual(d1,d2);}private static boolean isRelativelyEqual(double d1,double d2) { return delta > Math.abs(d1- d2) / Math.max(Math.abs(d1),Math.abs(d2));}

標簽: java
相關文章:
主站蜘蛛池模板: 亚洲图片色 | 国产69精品久久久久9牛牛 | 国产一级特黄在线播放 | 国产精品酒店视频免费看 | 青青热久久国产久精品 | 1000部啪啪勿入十八免费 | 亚洲一区二区综合 | 国产91久久久久久久免费 | 国产高清在线视频伊甸园 | 伊人久久成人爱综合网 | 亚洲一区日韩二区欧美三区 | 99热国产这里只有精品9九 | 1024cc香蕉在线观看免费 | 天天在线天天综合网色 | 久久99精品这里精品3 | 亚洲色图亚洲色图 | 韩日在线播放 | 91老师国产黑色丝袜在线 | 国语对白刺激做受xxxxx在线 | 国产日产欧美一区二区三区 | 国产视频一二三区 | 亚洲天天网综合自拍图片专区 | 久久精品国产一区 | 色综合国产 | 国产精品400部自产在线观看 | 欧美日韩亚洲综合另类ac | 亚洲人成在线精品不卡网 | 中国美女黄色一级片 | 京野结衣免费一区二区 | 欧美日韩一区二区三区四区在线观看 | 精品一精品国产一级毛片 | 国产亚洲精品美女久久久 | 国产精品特黄毛片 | 欧美日韩综合一区 | 薰衣草视频高清在线观看免费 | 天天久久综合 | 女人洗澡一级毛片一级毛片 | 精品视频vs精品视频 | 日韩精品大片 | 国产区综合另类亚洲欧美 | 国产毛片久久久久久国产毛片 |