我是BigDecimal的新手。
我使用Java代碼嘗試了一些數學計算。當我使用谷歌計算器進行相同的計算時,它給我的結果略有不同。哪一個是最準確的?如果Google計算器更準確,那麼如何提高java代碼來匹配呢?這個BigDecimal計算有什麼問題嗎?
在谷歌計算器:
134.23576185216913 - (134.23576185216913×√(1 - (2億^ 2÷299800000^2)))= 34.2357618522
在爪哇:
BigDecimal t1 = new BigDecimal(134.23576185216913);
BigDecimal one = new BigDecimal(1);
BigDecimal speed = new BigDecimal(200000000).pow(2);
BigDecimal lightsSpeed = new BigDecimal(299800000).pow(2);
MathContext mc = new MathContext(2, RoundingMode.HALF_UP);
System.out.println(t1.subtract((t1.multiply(SquareRoot.bigSqrt(one.subtract(speed.divide(lightsSpeed,mc)))))));
bigSqrt的方法是從here
結果是:
運行: 34.683856455950090090043113321827989040137639817587194953722595479211000578082422197809603912048352550091209304856567024386365147605287692511973841869226169664820176852861655846233912503305984796190828666994508412096618025960010635831985100961879858807909056676663493607611105279976694118991120829708264297254294821755138400476425886154174804687500
BUILD SUCCESSFUL(總時間:0秒)
這可能有助於降低下來到最小的部分仍然顯示差異。例如,我想象這種損失不在減法中,你可能會刪除那部分並仍然看到差異。最簡單的情況總是最容易調試。 –
儘管您使用BidDecimal,但您可以使用'double'文字構造它:'134.23576185216913'。精度的改變從那裏開始。你從哪裏得到'134.23576185216913'?這可以預先表示爲一個分數嗎?這可能會有更好的結果。 – Nivas
「SquareRoot」類從哪裏來? – Nivas