我在哪里可以查看Python的数学函数?
我想了解一下Python是怎么计算平方根的,所以我试着找一下math.sqrt()
的定义,但我到处找都没找到。我查看了_math.c
、mathmodule.c
以及其他地方。
我知道Python使用的是C语言的数学函数,但这些函数是在Python的安装包里,还是链接到其他地方的代码呢?我现在使用的是Mac OS X。
math.sqrt()
的算法到底在哪里呢?
3 个回答
我不太确定在哪里能找到Python使用的具体算法,但我希望这些信息对你有帮助。在Python中,计算平方根最简单的方法是用**(幂)运算符。我不知道你对指数的了解有多少,但平方根其实就是把一个数的指数设为0.5。所以你可以这样写:
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
我希望你能看出其中的规律。也希望这些对你有帮助!:)
有些模块是用C语言写的,而不是用Python,所以你找不到以.py结尾的文件。想要查看这些模块的列表,你可以使用:
import sys
print sys.builtin_module_names
因为这些模块是用C语言写的,所以你需要在源代码中查找。如果你已经有了源代码,它们会在模块目录里。
这要看具体的实现方式。CPython使用的是标准C库里的数学函数,而Jython很可能使用的是Java的数学方法,其他的也是类似的情况。
实际上,Python本身和数学函数的具体实现没有直接关系。这些函数更多是和IEEE 754标准有关,这个标准现在几乎是用来表示计算机中的浮点数。
总的来说,CPython的math
模块其实只是对C语言函数的一个简单封装(证明链接,在页面底部)。这些C语言函数是标准C库的一部分。标准C库通常会包含在操作系统的发行版中,通常以二进制形式分发,而不是源代码形式。另外,很多微处理器对某些操作有专门的指令,你的编译器可能会使用这些指令,而不是直接调用C库里的实现。
我不能告诉你你系统上标准C库使用的确切算法。有些可能的算法可以在这里找到解释。
以OS X为例,数学函数是在libSystem.dylib
里,但不幸的是,这个库不是开源的(在苹果的开源网站上只有一些示例代码可用)。不过,如果你感兴趣,可以对它进行反汇编 - 在当前系统上,可以尝试例如:
otool -tvV /usr/lib/system/libsystem_m.dylib