end*_*ith 1 python floating-point integer modulo
来自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)<1.这用于以便携方式"分离"浮点的内部表示.
math.modf(x)的
返回x的小数和整数部分.两个结果都带有x的符号并且是浮点数.
在这个相关的问题中,它指出返回浮点数对于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)
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
大多数math模块函数都是围绕C语言标准定义的同名函数的瘦包装器. frexp()并且modf()是两个这样的,并返回相同的东西,相同名称的C函数返回.
因此,部分原因是语言间操作的简便性.
但另一部分是实用性:
>>> from math import modf
>>> modf(1e100)
(0.0, 1e+100)
Run Code Online (Sandbox Code Playgroud)
你真的想把10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104作为"整数部分"吗?
C不可能这样做,因为它没有无界的整数.Python根本不想这样做;-)请注意,所有足够大小的浮点值都是精确整数 - 尽管它们可能需要数百个十进制数字来表示.
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |