我正在使用此BigInteger.js进行一些计算:
let myBigInt = bigInt(20).pow(200) // gets 160693804425899027554196209234116260252220299378279283530137600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我想将对数应用于大整数,但是在文档中我找不到任何匹配的函数。如何为BigInteger.js库实现log(baseN, valueX)
函数?
注意:let myLogarithm = myBigInt.log(baseN)
不是有效的实现。
注意:经过多次尝试和错误,我确实找到了自己的可行解决方案,因此将其发布在这里,因为我敢肯定,除了我之外,还有更多人也遇到相同的问题那里。因此,我希望可以提供帮助:)
像我一样查看wikipedia,因为有一篇关于baseConversion的很好的文章。
下面您可以找到Math.log(base, value)
的函数,该函数能够从一个值计算log(base)
。
Math.log = (function() {
var log = Math.log;
return function(base, n) {
return log(n)/(base ? log(base) : 1);
};
})();
要计算bigInt值的logarithmToBaseN
,只需使用以下代码行:
let logarithmToBaseN = (myBigInt.toString().length * Math.log(baseN, 10) + Math.log(baseN, parseFloat("0." + myBigInt))) - 1);
Edit:此解决方案很小,是因为 根据parseFloat("0." + myBigInt)
将100000
之类的大值转换为0.100000,...
之类的小值,这是因为它将导致整数精度。 >@Jonas W
的评论(5, 10, ...)
之类的低位碱基与10, 1000, 100000
之类的低值结合非常准确,但是对于[bigInt(20).pow(200)
的真正大值
Note:使用parseFloat
(IEEE 754双精度
[注:
对于真正大的值bigInt(20).pow(200)
与真正的[[大基数结合起来,例如100 *(及更多),它似乎又很准确。问候,乔纳斯。