0

对于我的论文,我一直在寻找一个用 Vyper 智能合约计算 exp(x) 的方程。我选择 Vyper 而不是 Solidity,因为它能够处理定点数。但是,我找不到有效的方法,因为 Vyper 不允许我使用十进制基数进行幂运算。

我想做的是 e**x (e = 常数欧拉数 = 大约 2.718281828。x 是可以为负数或正数的小数变量)

我尝试寻找一个 Vyper 数学库,它为小数提供求幂函数,但没有运气。某处有人建议使用指数 e 的查找表来最小化计算时间。但是,我不知道如何在 Vyper 中实现它。

我目前正在尝试开发基于泰勒级数的指数函数,https://en.wikipedia.org/wiki/Taylor_series

这是计算这个问题的唯一方法吗?我觉得可能有更好的解决方案。

4

1 回答 1

0

我所拥有的是一个解决方案,但它并不完美,而且我还无法让它在 Vyper 中可靠地运行。不过,这可能是您可以探索论文的途径。我所拥有的是基于这个 Stackoverflow 答案:

https://ethereum.stackexchange.com/a/65854

我的答案涉及将 e 乘以比例因子并对其进行取幂。比例因子是您想要精确的小数位数。对缩放后的数字进行取幂后,然后将结果除以由指数缩放的除数。数字很​​快就会变大,但这是我拥有的代码(注意:代码在 Python 中而不是 Vyper 中):

import math

SCALE = 10
EXP = 3

eScaled = math.e * (10 ** SCALE)
eScaleDiv = (10 ** SCALE) ** EXP
ePowExpScaled = eScaled ** EXP

print(ePowExpScaled / eScaleDiv)
print(math.e ** EXP)
于 2021-11-16T20:43:31.410 回答