国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

一種特別糟糕的情況是,如果減去兩個(gè)幾乎相等的數(shù)字,例如1.0000000001-1.0并將結(jié)果與??0.0000000001進(jìn)行比較

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

例如輸出

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

間隔算術(shù)可用于跟蹤累積的舍入誤差。但是實(shí)際上,錯(cuò)誤間隔過于悲觀,因?yàn)橛袝r(shí)舍入錯(cuò)誤也會(huì)相互抵消。

解決方法

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

我的問題是:

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

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

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

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));}

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 欧美三级免费网站 | 精品在线视频播放 | 欧美aaaaaaaaa| 国产夜色| 亚洲综合色视频在线观看 | 久久精品视频一区 | 成人国产精品一级毛片了 | 国产成人福利视频在线观看 | 色偷偷成人网免费视频男人的天堂 | 亚洲欧洲日产v特级毛片 | 色综合视频一区二区观看 | 日本aaaa级毛片在线看 | 在线はじめてのおるすばん | 国产91精品久久久久999 | 欧美最黄视频 | 免费观看情趣v视频网站 | 久久精品国产一区二区三区日韩 | 68久久久久欧美精品观看 | 色偷偷888欧美精品久久久 | 明星国产欧美日韩在线观看 | 成人午夜免费在线观看 | 亚洲精品一区二区在线观看 | 韩日一级视频 | 网站免费满18成年在线观看 | 国产91精品一区二区麻豆亚洲 | 米奇777第四久久久99 | 免费看a级| 国产黄网 | 国产精品亚洲国产三区 | 国产成人艳妇在线观看 | 亚洲成人高清 | 国产精品99久久久久久小说 | 女人张开腿给男人桶爽免费 | 99热免费| www.亚洲视频 | 亚洲国产美女视频 | 成年人国产视频 | 亚洲不卡影院 | hdxxx色视频 hd欧美xxx欧美极品hd | 69av美女| 午夜毛片免费观看视频 |