2017-01-31 4 views
-3

Я хочу создать случайное число от 0 до 1, но вывод моих кодов равен нулю.Случайное число от нуля до одного в C++

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

int main() 
{ 
    srand(time(0)); 

    for(int x=0;x<100;x++) 
    { 
     cout<<(rand()%10)/10<<endl; 
    } 
    return 0; 
} 
+1

ли вы собираетесь иметь целочисленное деление там? –

+1

Я рекомендую использовать [современные объекты случайных чисел C++] (http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution) вместо 'rand()'. –

+1

См. Http://stackoverflow.com/questions/686353/c-random-float-number-generation – jhilmer

ответ

3

Это: (rand()%10)/10 дает вам (низкое качество) случайное целое число от нуля до RAND_MAX, тогда вы используете modulo, чтобы превратить это в (смещенное) целое число от нуля до девяти, тогда вы выполняете целочисленное деление на 10, которое всегда будет значение меньше 1, которое будет усечено до нуля.

Гораздо лучшим решением было бы использовать случайные объекты из C++ 11 и использовать std::uniform_real_distribution, чтобы получить ваше значение в диапазоне от 0 до 1.

0

Вы делите int. Все, что ниже одного, будет сокращено до 0. Вам нужно объявить/бросить двойное или плавающее (иметь десятичные числа).

+2

Нет - даже литье в поплавок или двойное не даст равномерного распределенного случайного числа от 0 до 1 – jhilmer

+1

@jhilmer I ответила только часть вопроса (почему вывод равен 0). На самом деле нет актуального вопроса для начала, поэтому я просто дал ему подсказку, чтобы попытаться исправить его код. Я должен был добавить, что это не решение всей проблемы. – Carele

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