编程语言
首页 > 编程语言> > 是否可以在JavaScript中实现无舍入问题的任意精度算术?

是否可以在JavaScript中实现无舍入问题的任意精度算术?

作者:互联网

我已经尝试过big.js,bignumber.js和decimal.js;它们在一定程度上都可以正常工作,但是当我需要使用足够大的“奇数”位数进行任意精度计算时(我当前的测试用例是31435517643980 *(1 / / 31435517643980 * === 1)) .我对允许我处理这样的表达式(包括对外部API的调用)的任何解决方案持开放态度.我目前正在查看Wolfram | Alpha的API,但是我想避免限制每月2000个调用的限制,因为我的应用程序将要进行多次调用.

如果这是该问题的错误SE网站,请让我知道和/或移动它.

解决方法:

可能最常用的方法是将两个数字乘以同一个乘法器,使它们没有小数,然后进行运算,然后再除.这是一个粗略的实现:

function getDigits(n){
    return n.toString().substring(n.toString().indexOf('.')+1).length;
}
function xNums(n1,n2){
    var highRes=(n1*Math.pow(10,getDigits(n1))*(n2*Math.pow(10,getDigits(n2))));
    return highRes/Math.pow(10,getDigits(n1))/Math.pow(10,getDigits(n2));
}

然后,运行xNums(31435517643980,(1/31435517643980))=== 1.在Chrome中为我工作

标签:rounding-error,javascript,math
来源: https://codeday.me/bug/20191012/1900455.html