gpt4 book ai didi

javascript - BigInt 的对数

转载 作者:行者123 更新时间:2023-12-05 00:23:54 30 4
gpt4 key购买 nike

有没有办法得到 BigInt 的对数?在 JavaScript 中?
对于普通数字,您将使用以下代码:

const largeNumber = 1000;
const result = Math.log(largeNumber);
但是,我需要使用可能高于 170 的阶乘数字!所以常规数字类型不起作用。 Math.log不适用于 BigInt。那么如何得到对数呢?
const largeNumber = BigInt(1000);
const result = ???

最佳答案

如果您不想返回 BigInt ,那么以下内容也可能对您有用:

function log10(bigint) {
if (bigint < 0) return NaN;
const s = bigint.toString(10);

return s.length + Math.log10("0." + s.substring(0, 15))
}

function log(bigint) {
return log10(bigint) * Math.log(10);
}

function natlog(bigint) {
if (bigint < 0) return NaN;

const s = bigint.toString(16);
const s15 = s.substring(0, 15);

return Math.log(16) * (s.length - s15.length) + Math.log("0x" + s15);
}

const largeNumber = BigInt('9039845039485903949384755723427863486200719925474009384509283489374539477777093824750398247503894750384750238947502389475029384755555555555555555555555555555555555555554444444444444444444444444222222222222222222222255666666666666938475938475938475938408932475023847502384750923847502389475023987450238947509238475092384750923847502389457028394750293847509384570238497575938475938475938475938475555555555559843991');

console.log(natlog(largeNumber)); // 948.5641152531601
console.log(log10(largeNumber), log(largeNumber), log(-1))
// 411.95616098588766
// 948.5641152531603
// NaN
log10()将为任何 BigInt 返回标准精度浮点数或作为参数输入的 Int 数字。

正如@Mielipuoli 非常正确地提到的那样,自然对数可以计算为
function log(bigint) {
return log10(bigint) / Math.log10(Math.E);
}
或者,更简单,如我上面的片段所示,如 log10(bigint) * Math.log(10) .
@Nat 已经在下面的评论中解释了这种方法的工作原理,即分别计算对数的整数和小数部分并将它们相加。关于结果的精度: Math.log10()适用于具有通常 13 到 14 位十进制数字精度的浮点数,因此,对于结果,这也是您所期望的。
出于这个原因,我将 BigInt 数字的字符串表示形式 chop 为 15 个字符。无论如何,在隐式类型转换为浮点数时,任何进一步的小数位都会被忽略。
我还在这里添加了十六进制字符串版本,由@PeterCordes 建议并由@somebody 进一步开发为 natlog() .它工作 - 可能比我原来的解决方案更快 - 并产生“相同”的结果(只有最后显示的数字在两个结果之间存在偏差)!

关于javascript - BigInt 的对数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70382306/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com