来自http://docs.python.org/2/library/math.html:
math.frexp(x)的
返回x的尾数和指数作为对(m,e)。 m是浮点数,e是整数,因此x == m * 2 ** e。如果x为零,则返回(0.0,0),否则0.5 <= abs(m)<0。这用于以便携方式“分离”浮动的内部表示。
math.modf(x)的
返回x的小数和整数部分。两个结果都带有x 的符号,并且是浮点数。
在this related question中,它指出返回浮点数对于ceil和floor都没有意义,因此在Python 3中,它们被更改为返回整数。是否有一些原因导致modf
的整数结果也不作为整数返回?在Python 2.7中:
In [2]: math.floor(5.5)
Out[2]: 5.0
In [3]: math.modf(5.5)
Out[3]: (0.5, 5.0)
In [4]: math.frexp(5.5)
Out[4]: (0.6875, 3)
在Python 3中:
In [2]: math.floor(5.5)
Out[2]: 5
In [3]: math.modf(5.5)
Out[3]: (0.5, 5.0)
In [4]: math.frexp(5.5)
Out[4]: (0.6875, 3)
答案 0 :(得分:7)
大多数math
模块函数都是围绕C语言标准定义的同名函数的瘦包装器。 frexp()
和modf()
是两个这样的,并且返回相同名称的C函数返回的相同内容。
因此,部分原因是语言间操作的简易性。
但另一部分是实用性:
>>> from math import modf
>>> modf(1e100)
(0.0, 1e+100)
你真的想把10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104作为“整数部分”吗?
C不可能这样做,因为它没有无界的整数。 Python根本没有想要这样做;-)请注意,所有足够大的浮点值都是精确整数 - 尽管它们可能需要数百个十进制数字才能表示