1

来自http://docs.python.org/2/library/math.html

数学.freexp(x)

将 x 的尾数和指数作为 (m, e) 对返回。m 是一个浮点数,e 是一个整数,使得 x == m * 2**e 精确。如果 x 为零,则返回 (0.0, 0),否则返回 0.5 <= abs(m) < 1。这用于以可移植的方式“分离”浮点数的内部表示。

数学.modf(x)

返回 x 的小数和整数部分。两个结果都带有 x 的符号并且是 floats

这个相关的问题中,指出返回浮点数对 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)
4

1 回答 1

8

大多数math模块函数都是 C 语言标准定义的同名函数的薄包装。 frexp()并且modf()是两个这样的,并返回相同名称的 C 函数返回的相同内容。

因此,其中一部分是易于跨语言操作。

但另一部分是实用性:

>>> from math import modf
>>> modf(1e100)
(0.0, 1e+100)

您真的想将 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 作为“整数部分”返回吗?

C 不可能这样做,因为它没有无限整数。Python 根本不想这样做 ;-) 请注意,所有足够大的浮点值都是精确整数——尽管它们可能需要数百个十进制数字来表示。

于 2013-10-12T00:34:13.000 回答