2016-04-10 2 views
0

Я хочу генерировать случайные числа из [0,1].Как генерировать случайные числа из [0,1]?

import os 

int.from_bytes(os.urandom(8), byteorder="big")/((1 << 64) - 1) 

Код, указанный выше, не работает в моей версии python.

Также

import random 

random.random() 

только генерировать случайные величины из [0,1) и не включает в себя: 1. Я хочу, чтобы это было именно [0,1] Любые другие способы сделать это? random модуль

+0

'random.uniform (0, 1)'? –

+0

@ajcr Я прочитал документацию, и он говорит для random.uniform: «Конечное значение b может или не может быть включено в диапазон в зависимости от округления с плавающей запятой в уравнении a + (ba) * random(). " Поэтому я не уверен, что случайный выбор - хороший выбор. –

+1

@ Ralf17 Но разве это не означает, что 'float' не может гарантировать включение/исключительность точных границ из-за его прецизионных ограничений? – schwobaseggl

ответ

2

Используйте Пайтона:

import random 

# int 
x = random.randint(0, 1) # 0 or 1(both incl.) 

# float excl. 1.0 
x = random.random() # float from [0,1) 

или, как указывает @ajcr и описал here:.

# from [0.0, 1.0], but upper boundary not guaranteed 
x = random.uniform(0, 1) 

Как float «s точность и округление проблемы относятся ко всем этим методам, можно попытаться обмануть и использовать модуль decimal:

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 
+1

Я хочу генерировать непрерывные переменные или float, random.randint (0, 1) дает только целые числа, тогда как random.random() работает на [0,1), но не [0,1]. –

+1

Хм ... какое разрешение вам нужно. Полная точность с плавающей запятой. Вы можете пойти с sth. как "random.randint (0, 10 ** 6) * 1.0/10 ** 6' – schwobaseggl

0

Инструмент, который вы ищете, может быть random.uniform(0, 1)

Смежные вопросы