için Python'un random
modülü:
import random
# int
x = random.randint(0, 1) # 0 or 1(both incl.)
# float excl. 1.0
x = random.random() # float from [0,1)
ya, @ajcr tarafından işaret ve here açıklandığı gibi:.
# from [0.0, 1.0], but upper boundary not guaranteed
x = random.uniform(0, 1)
'ın float
gibi hassas ve yuvarlama sorunlar tüm bu yöntemlere başvurmak, Bir kişi decimal
modülünü aldatmayı ve kullanmayı deneyebilir:
import decimal
def randfloat():
decimal.getcontext().prec = 10 # 10 decimal points enough?!
return decimal.Decimal(0) + decimal.Decimal(random.uniform(0, 1))
# this should include both boundaries as float gets close enough to 1 to make decimal round
>>> decimal.Decimal(0) + decimal.Decimal(0.99999999999)
Decimal('1.000000000')
# while uniform() apparently guarantees the inclusion of the lower boundary
'random.uniform (0, 1)'? –
@ajcr Belgeyi okudum ve random.uniform için diyor: "Son nokta değeri b, + (ba) * random() denklemindeki kayan nokta yuvarlamasına bağlı olarak aralığa dahil olabilir veya olmayabilir. " Bu yüzden random.uniform iyi bir seçim ise emin değilim. –
@ Ralf17 Ancak bu, 'float', hassas sınırlamaları nedeniyle kesin sınırların kapsayıcı/ayrıcalıklılığını garanti edemez mi? – schwobaseggl