【问题标题】:Is there a way in vyper to calculate e^x with x being a signed decimal?vyper 有没有办法计算 e^x ,其中 x 是有符号小数?
【发布时间】:2021-11-13 13:14:09
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: decimal smartcontracts exponential vyper


    【解决方案1】:

    我有一个解决方案,但它并不完美,而且我还不能让它在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多