Ну, если вы используете numpy, вы можете просто использовать numpy.nextafter :
>>> 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.uniform будет включать верхнюю границу для некоторых входных данных, отличных от (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
[Я разделяюобщее ощущение, что, возможно, есть лучший способ решения этой проблемы.]