我正在开展一个学校项目,要求我对单精度浮点数进行一些数学运算。我以为我会在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')
答案 0 :(得分:5)
首先,没有明确格式化或转换的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
编辑:您可以使用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