numpy float32截断小数

时间:2015-09-14 19:59:08

标签: python numpy floating-point

我正在开展一个学校项目,要求我对单精度浮点数进行一些数学运算。我以为我会在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')

1 个答案:

答案 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