我想看看Python计算平方根的方式,所以我试图找到math.sqrt()
的定义,但我在任何地方都找不到它。我已经在_math.c
、mathmodule.c
和其他地方找过了。
我知道python使用C的数学函数,但是这些函数是在Python发行版中的某个地方,还是链接到其他地方的代码?我使用的是Mac。
math.sqrt()
中的算法在哪里?
发布于 2011-03-30 01:20:23
这取决于实现方式。CPython使用标准C库中的数学函数。Jython很可能使用Java的数学方法。诸若此类。
事实上,Python与数学函数的实际实现无关。这些更多地与IEEE754有关,它现在几乎完全用于表示计算机中的浮点数。
无论如何,就CPython而言,它的math
模块只是C函数(页面底部的prooflink)的薄薄包装器。C函数是作为标准C库的一部分实现的。它通常包含在OS发行版中,并且很可能是以二进制形式分发的,没有源代码。还要注意的是,许多微处理器对其中一些操作有专门的指令,您的编译器可能会很好地利用这些指令,而不是跳到C库中的实现。
我不能告诉你在你的系统上标准C库中使用的确切算法。here解释了一些可能的算法。
在OS的特定情况下,数学函数驻留在libSystem.dylib
中,不幸的是它不是开源的(只有stub code available on Apple's Open Source site)。但是,如果您感兴趣,可以对其进行反汇编-在当前系统上,请尝试例如
otool -tvV /usr/lib/system/libsystem_m.dylib
发布于 2011-03-30 01:14:15
有些模块是用C编写的,而不是用python编写的,因此您无法找到.py文件。要查看这些列表,您可以使用:
import sys
print sys.builtin_module_names
因为它是用C语言编写的,所以你必须在源代码中找到它。如果您已经有了源代码,那么它就在modules目录中。
发布于 2011-03-30 01:08:35
https://stackoverflow.com/questions/5476189
复制相似问题