第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java高精度運(yùn)算問題求助

Java高精度運(yùn)算問題求助

元芳怎么了 2019-03-01 10:53:25
公司項(xiàng)目里面需要做大量的高精度運(yùn)算,剛開始用double類型運(yùn)算,后來發(fā)現(xiàn)用double類型運(yùn)算后有些值的精確度超過了理想范圍,就用了BigDecimal來計(jì)算,現(xiàn)在的問題是BigDecimal的運(yùn)算效率比double慢幾十倍,數(shù)據(jù)量大的話,慢的要死。請(qǐng)問有沒有好的解決方案?這個(gè)問題急需解決。 //相關(guān)性系數(shù)計(jì)算 public BigDecimal getRelativityTool_bydim(RelativityTool u) { BigDecimal sim = new BigDecimal("0"); //最后的皮爾遜相關(guān)度系數(shù) BigDecimal common_items_len = new BigDecimal(this.rating_map_list.size()); //操作數(shù)的個(gè)數(shù) BigDecimal this_sum = new BigDecimal("0"); //第一個(gè)相關(guān)數(shù)的和 BigDecimal u_sum = new BigDecimal("0"); //第二個(gè)相關(guān)數(shù)的和 BigDecimal this_sum_sq = new BigDecimal("0"); //第一個(gè)相關(guān)數(shù)的平方和 BigDecimal u_sum_sq = new BigDecimal("0"); //第二個(gè)相關(guān)數(shù)的平方和 BigDecimal p_sum = new BigDecimal("0"); //兩個(gè)相關(guān)數(shù)乘積的和 for (int i = 0; i < this.rating_map_list.size(); i++) { BigDecimal this_grade = this.rating_map_list.get(i); BigDecimal u_grade = u.rating_map_list.get(i); //評(píng)分求和 //平方和 //乘積和 this_sum = this_sum.add(this_grade); u_sum = u_sum.add(u_grade); this_sum_sq = this_sum_sq.add(this_grade.pow(2)); u_sum_sq = u_sum_sq.add(u_grade.pow(2)); p_sum = p_sum.add(this_grade.multiply(u_grade)); } BigDecimal num = common_items_len.multiply(p_sum).subtract(this_sum.multiply(u_sum)); BigDecimal den = sqrt(common_items_len.multiply(this_sum_sq).subtract(this_sum.pow(2)).multiply(common_items_len.multiply(u_sum_sq).subtract(u_sum.pow(2)))); if (den.compareTo(new BigDecimal("0")) == 0) { sim = new BigDecimal("1"); } else { sim = num.divide(den,5, BigDecimal.ROUND_HALF_UP); } return sim; } //大數(shù)字開方 public static BigDecimal sqrt(BigDecimal x) { BigDecimal n1 = BigDecimal.ONE; BigDecimal ans = BigDecimal.ZERO; while ((n1.multiply(n1).subtract(x)).abs().compareTo(BigDecimal.valueOf(0.001)) == 1) { BigDecimal s1 = x.divide(n1, 2000, BigDecimal.ROUND_HALF_UP); BigDecimal s2 = n1.add(s1); n1 = s2.divide(BigDecimal.valueOf(2), 2000, BigDecimal.ROUND_HALF_UP); } ans = n1; BigDecimal rt = new BigDecimal(ans.toString().split("\\.")[0]); return rt; }
查看完整描述

3 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

除了使用C或者C++來做高精度運(yùn)算之外,好像沒有什么辦法可以同時(shí)兼顧性能和精度了。

查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

大學(xué)計(jì)算機(jī)專業(yè)有門課程叫“計(jì)算方法”,專門探討如何在精度有限的計(jì)算過程中保持誤差最小化。樓主有興趣的話可以找下相關(guān)教材。

查看完整回答
反對(duì) 回復(fù) 2019-03-01
  • 3 回答
  • 0 關(guān)注
  • 463 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)