gpt4 book ai didi

javascript - 为什么 BigInt(largeNumber) 仍然不精确?

转载 作者:行者123 更新时间:2023-11-30 09:13:43 24 4
gpt4 key购买 nike

我想求一个大数所有数字的和,例如 9995

我应用 BigInt 来获取大数的幂并使用下面的代码将其数字相加。

BigInt(Math.pow(99, 95)).toString().split("").reduce((a, b) => a * 1 + b * 1)

然而,它返回845,但正确答案应该是972

我检查了大数的整数输出。在 JavaScript 中是:

384896078893484848828245256950948459077619561131455404911467313251091009678767971560442267379711545180763198037307737 4162416714994207463122539142978709403811688831410945323915071533162168320

这与正确答案(在 C# 中)不同:

384896078893484861192779580282459678960845115608736603465862795353014812600853425803226738376862748709461096855428669 2697374726725853195657679460590239636893953692985541958490801973870359499

我想知道我的代码中有什么问题导致了差异。

最佳答案

表达式 Math.pow(99, 95) 在解析时已经失去了精度 - 将它转换为 BigInt 之后并没有恢复丢失的精度。

从一开始就使用 BigInts,并使用 ** 而不是 Math.pow 以便求幂:

console.log(
(99n ** 95n)
.toString()
.split('')
.reduce((a, b) => a + Number(b), 0)
);

关于javascript - 为什么 BigInt(largeNumber) 仍然不精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56696469/

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