【问题标题】:Where in the python source code is math.exp() defined?在 python 源代码中的哪里定义了 math.exp() ?
【发布时间】:2015-08-31 22:37:02
【问题描述】:

我想知道如何在python中实现math.exp()函数。 Python 源代码在哪里定义了math.exp()

【问题讨论】:

  • @PaulC:你太有帮助了!你只是在鼓励人们让 SOers 代表他们使用搜索引擎。
  • @PaulC Tks。在问这个问题之前,我在谷歌上搜索过。我找不到 math.exp() 函数源代码。所以...
  • 这个实际上很难找到,但如果你显示你看的地方并没有找到它会有所帮助。它在 C 中定义; Python 结构的条目位于mathmodule.c file
  • 一个macro defines exp 作为C exp function 的应用程序,由mathmodule.c-defined math_1 function 包裹。 C 函数的实现取决于您的平台库。
  • @MartijnPieters:您为什么在 cmets 部分提供答案?您提供的信息是完全可以接受的答案。

标签: python exp


【解决方案1】:

这个有点棘手。

math 模块在 C 模块 mathmodule.c 中实现。在该文件的末尾有一个特定的 Python 库结构,它定义了exp as implemented by math_exp

static PyMethodDef math_methods[] = {
    # ...
    {"exp",             math_exp,       METH_O,         math_exp_doc},

math_exp 本身实际上是通过FUNC1 macro 定义的,使用math_1 wrapper function 调用C library exp function 并进行一些错误处理和类型转换:

FUNC1(exp, exp, 1,
     "exp(x)\n\nReturn e raised to the power of x.")

然而,C 函数实现本身完全依赖于平台,并且在现代硬件上通常由在硬件中处理。您必须转向该函数的软件版本才能找到在 Python 中实现此功能的起点。

您可以使用 fdlibm 实现作为这样的起点,也许,这里是该库中 C 中 exp 函数实现的链接:

或者你可以参考这个实现:

【讨论】:

  • 大多数硬件(例如 x86)不会在硬件中将exp 作为单个指令执行。一些旧的 32 位 x86 数学库可能已经使用了 x87 指令,但即使是微编码的,也不是真正的专用硬件。通常,您将指数的整数部分填充到float 的指数字段中,并在小数部分上使用exp 的多项式逼近。
猜你喜欢
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2022-10-09
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
相关资源
最近更新 更多