求教 solidity 中,计算幂的问题

2022-09-05 21:57:23 +08:00
 Features
想要计算 20128 的 n 次方

比如 20128 ** 180

这个数明显超过 int256 了
运行也会报错

应该怎样做才能保证计算能正常进行?

有什么优雅的办法吗?
1355 次点击
所在节点    程序员
3 条回复
nyxsonsleep
2022-09-05 23:32:43 +08:00
调用 bigint
harrytse94
2022-09-06 09:48:30 +08:00
没有好的办法,这两种比较常见
1 将幂运算的底数或者指数缩小,一般底数都有对应的放大,在需求内将底数的放大倍数缩小。或者将指数缩小,比如原来是秒指数,变成分指数就缩小了 60 倍
举例 按秒计算的利率为 1.0000000006 一天 86400 秒
正常计算是 10000000006 ** 86400
改成按分计算,分利率比秒利率大,假设 1.000000005 一天 1400 分
计算就变成了 10000000050 ** 1440
由于分利率比秒利率大了一个数量级,因此可以把底数缩小,计算就变成了
1000000005 ** 1440

2 一般这个幂计算的结果不是最终结果,还需要除以放大倍数,比如计算复利 1.000003 ** 365 ,通常计算是是 (10000030) ** 365 / (10**7 ** 364) 可以在这个过程中拆分,比如
s1 = (10000030) ** 100 / (10**7 ** 99)
s2 = (s1) ** 100 / (10**7 ** 99)
s3 = (s1) ** 100 / (10**7 ** 99)
s4 = (s1) ** 65 / (10**7 ** 64)
harrytse94
2022-09-06 10:09:26 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX