600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java如何对一个表达式开根号_Java中 如何对大数开根号啊!

java如何对一个表达式开根号_Java中 如何对大数开根号啊!

时间:2021-10-12 23:27:30

相关推荐

java如何对一个表达式开根号_Java中 如何对大数开根号啊!

展开全部

java中对于大数BigInteger,BigDecimal开根号没有提供函数,可以参考以下实现方法:

import java.math.BigDecimal;

import java.math.BigInteger;

public class BigSquareRoot {

final static BigInteger HUNDRED = BigInteger.valueOf(100);

public static BigDecimal sqrt(BigDecimal number, int scale, int roundingMode) {

e5a48de588b63231313335323631343130323136353331333337613139if (pareTo(BigDecimal.ZERO) < 0)

throw new ArithmeticException("sqrt with negative");

BigInteger integer = number.toBigInteger();

StringBuffer sb = new StringBuffer();

String strInt = integer.toString();

int lenInt = strInt.length();

if (lenInt % 2 != 0) {

strInt = '0' + strInt;

lenInt++;

}

BigInteger res = BigInteger.ZERO;

BigInteger rem = BigInteger.ZERO;

for (int i = 0; i < lenInt / 2; i++) {

res = res.multiply(BigInteger.TEN);

rem = rem.multiply(HUNDRED);

BigInteger temp = new BigInteger(strInt.substring(i * 2, i * 2 + 2));

rem = rem.add(temp);

BigInteger j = BigInteger.TEN;

while (pareTo(BigInteger.ZERO) > 0) {

j = j.subtract(BigInteger.ONE);

if (((res.add(j)).multiply(j)).compareTo(rem) <= 0) {

break;

}

}

res = res.add(j);

rem = rem.subtract(res.multiply(j));

res = res.add(j);

sb.append(j);

}

sb.append('.');

BigDecimal fraction = number.subtract(number.setScale(0, BigDecimal.ROUND_DOWN));

int fracLen = (fraction.scale() + 1) / 2;

fraction = fraction.movePointRight(fracLen * 2);

String strFrac = fraction.toPlainString();

for (int i = 0; i <= scale; i++) {

res = res.multiply(BigInteger.TEN);

rem = rem.multiply(HUNDRED);

if (i < fracLen) {

BigInteger temp = new BigInteger(strFrac.substring(i * 2, i * 2 + 2));

rem = rem.add(temp);

}

BigInteger j = BigInteger.TEN;

while (pareTo(BigInteger.ZERO) > 0) {

j = j.subtract(BigInteger.ONE);

if (((res.add(j)).multiply(j)).compareTo(rem) <= 0) {

break;

}

}

res = res.add(j);

rem = rem.subtract(res.multiply(j));

res = res.add(j);

sb.append(j);

}

return new BigDecimal(sb.toString()).setScale(scale, roundingMode);

}

public static BigDecimal sqrt(BigDecimal number, int scale) {

return sqrt(number, scale, BigDecimal.ROUND_HALF_UP);

}

public static BigDecimal sqrt(BigDecimal number) {

int scale = number.scale() * 2;

if (scale < 50)

scale = 50;

return sqrt(number, scale, BigDecimal.ROUND_HALF_UP);

}

public static void main(String args[]) {

BigDecimal num = new BigDecimal("6510354513.6564897413514568413");

long time = System.nanoTime();

BigDecimal root = sqrt(num, 1000);

time = System.nanoTime() - time;

System.out.println(root);

System.out.println(root.pow(2));

System.out.println(time);

}

}

执行结果:

80686.767896951292749341631674155726672273998437215163471587675235804949266307781784305909514663791118049088575874465127328130328831737488533260705133017602857255817205421702904264208028412195089160551886227349323919132148293688445347529243846517751025383884710742819252354014378344895438280908159584992112041354808433466321589387318739165992813377399669170549811704076258078653548749003251504791227309054913701062929858500433745971631998487835576600579373929233933246442803804132298016737159672317482520249763464713581048142915509001995943192415694815489364740152312416736301233269587910628885614893125235822493317184917626076223325819402403220531926392808333854523694780539563293133232729900988243013464020440976396084796739002581380094075169287492710301071487312491530290342213569053680461901907481289230152643599970138861788489599118674849815164425194138401918499233009571650761625943781367455101019720348741842171772915942278011905594031830367343193606047124373968951524359600676406162506362881367

6510354513.65648974135145684129999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999261018570188221952291893989060522314831124441551378893535967705267631760321528768168724834287326515045363352674753723601482743825942856975295422244377854494403314240402514260996495091952231436518286595873641532089471369852852836288689153782409421322773475625149587856634040959968482365944490429209988298566890680862317720866525191937026893789345730612180276656627062704168052625236841102345948799655110460391390302950170083523059788586776118307153717195882656868508634921003283484107506051230944462214561655110811989362386457901381371094116726117997257123357470563886214035746556929599452326174296080759360172792926272885615388050356145973630091010329970787377071326701815417116554517843000234245994056167888453015116676996418045399873420955405169122232655370071294850845464960894274665168357263422432309827443557629070976914823912072234212690264557460977055821182997270551415300643484661401600695692159450660675883266224059348596262991035678474047322232577044567479336985830934534290515788689

46726188

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。