Aus*_*tin 0 python floating-point numpy
我正在开展一个学校项目,要求我对单精度浮点数做一些数学计算.我以为我会在numpy中使用float32格式,因为python实际上是我所知道的唯一通用语言.IMO这个数字格式应该能够处理数字1.0000001,但它一直将我的答案截断为1.0.我能得到的最接近的是1.00001.任何人都可以对此有所了解吗?我是这个浮点格式和Python的新手.
import numpy as np
keyInput=np.float32(input("Enter a number and i'll float 32 it: "))
print(keyInput)
print(np.float32(keyInput))
print("This is of type: ",type(keyInput))
input('Press ENTER to exit')
Run Code Online (Sandbox Code Playgroud)
首先,print没有明确的格式化或转换是不可靠的.你应该尝试类似的东西print "%.10f" % number而不是print number.
其次,正如评论家指出的那样,你不能指望所有十进制数都被精确地表示为浮点数.阅读Goldberg论文.这是必读的.
一个示例ipython会话(我使用Python 2.7,如果你使用Python 3,print是一个函数):
In [1]: import numpy
In [2]: print numpy.float32(1.0 + 1e-7)
1.0
In [3]: print "%.10f" % numpy.float32(1.0 + 1e-7)
1.0000001192
In [4]: print "%.10f" % numpy.float32(1.0 + 1e-8)
1.0000000000
Run Code Online (Sandbox Code Playgroud)
编辑:您可以numpy用来检查类型精度限制.请参阅numpy.MachAr更多的文档.
例:
In [1]: import numpy
In [2]: machar = numpy.MachAr(float_conv=numpy.float32)
In [3]: machar.eps
Out[3]: 1.1920928955078125e-07
Run Code Online (Sandbox Code Playgroud)