好吧,如果你使用 numpy,你可以简单地使用numpy.nextafter http://docs.scipy.org/doc/numpy/reference/c-api.coremath.html:
>>> import numpy
>>> numpy.nextafter(1, 0)
0.99999999999999989
请注意(至少对我来说):
>>> import sys
>>> 1-sys.float_info.epsilon
0.9999999999999998
>>> numpy.nextafter(1, 0) - (1-sys.float_info.epsilon)
1.1102230246251565e-16
>>> numpy.nextafter(1, 0) > (1-sys.float_info.epsilon)
True
顺便说一句,第二@Robert Kern 的观点有时是 random.uniformwill包括除 (0, 1) 之外的某些输入的上限:
>>> import random, numpy
>>> numpy.nextafter(0,1)
4.9406564584124654e-324
>>> random.uniform(0, numpy.nextafter(0,1))
0.0
>>> random.uniform(0, numpy.nextafter(0,1))
0.0
>>> random.uniform(0, numpy.nextafter(0,1))
4.9406564584124654e-324
[我普遍认为可能有更好的方法来解决这个问题。]