我想看看Python计算平方根的方式,所以我试图找到math.sqrt()
的定义,但我无法在任何地方找到它。我查看了_math.c
,mathmodule.c
和其他地方。
我知道python使用C的数学函数,但这些函数是在Python发行版中的某个地方,还是在其他地方链接到代码?我使用的是Mac OS X.
math.sqrt()
中的算法在哪里?
答案 0 :(得分:13)
这取决于实施。 CPython使用标准C库中的数学函数。 Jython最有可能使用Java的数学方法。等等。
实际上,Python与数学函数的实际实现无关。这些与IEEE 754更相关,它现在几乎专门用于表示计算机中的浮点数。
无论如何,就CPython而言,它的math
模块只是C函数(页面底部的prooflink)的一个薄包装器。 C函数作为标准C库的一部分实现。它通常包含在OS发行版中,并且很可能以二进制形式分发,没有源代码。另请注意,许多微处理器都对这些操作中的某些操作有专门的指令,您的编译器可能会使用它们而不是跳转到C库中的实现。
我无法告诉您系统上标准C库中使用的确切算法。解释了一些可能的算法here。
在OS X的特定情况下,数学函数存在于libSystem.dylib
中,遗憾的是它不是开源的(只有stub code available on Apple's Open Source site)。但是,如果您感兴趣,可以将其拆解 - 在当前系统上,尝试例如。
otool -tvV /usr/lib/system/libsystem_m.dylib
答案 1 :(得分:2)
有些模块是用C语言编写的,而不是用python编写的,所以你将无法找到.py文件。有关这些的列表,您可以使用:
import sys
print sys.builtin_module_names
由于它是用C语言编写的,因此您必须在源代码中找到它。如果你有源它已经在modules目录中。
答案 2 :(得分:-1)
对代码的一个简单的grep会有所帮助:
http://svn.python.org/view/python/trunk/Modules/cmathmodule.c?revision=76978&view=markup
答案 3 :(得分:-4)
我不确定在哪里可以找到Python使用的确切算法,但我希望这对您有所帮助。在Python中计算平方根的最简单方法是使用**(幂)运算符。我不知道你用指数做了多少工作,但是平方根与把一些东西放到一半的力量上相同。因此,如果这是真的,你可以使用:
print x**0.5
这将打印放在x位置的任何数字的平方根。当然,如果您使用的是Python 3,那么您需要将其编写为:
print(x**0.5)
这是制作算法来计算数字平方根的最简单方法。这可以在以下函数中实现:
sqrt(x):
return x**0.5
对于其他根,例如立方根等,你可以使用这样的函数:
root(x, root):
return x**root
当您将根号传递给函数时,请使用十进制形式的索引编号,例如:
2:0.5
3:0.33333333(经常性)
4:0.25
5:0.2
我希望你能看到这种模式。我也希望这对你有所帮助! :)