2016-01-31 5 views
0

Я хотел бы создать случайное вещественное число в интервале [0,1]. Я хотел бы установить указатель, скажем n, для номера, поэтому всякий раз, когда я указывал n, он будет отнесен к произвольно сгенерированному номеру.Создание случайного, равномерно распределенного действительного числа в C

Я искал StackOverflow и в Google, но большинство из них предназначено для C++ или для целых чисел.

Я попробовал этот код предложил мне в ответ:

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
double n; 
double get_random() { return (double)rand()/(double)RAND_MAX; } 
n = get_random(); 
printf("%f", n); 
    return 0; 
} 

Однако, я могу получить только значение 0.00000000.

Как я могу исправить свою программу?

+1

ли жалуются на ваш компилятор при попытке '' printf' без знака int' с помощью '% f'? Возможно, вы хотели объявить 'r' как' double'. – e0k

+0

Ваш цикл 'while' неэффективен, так как' y = RAND_MAX + 1' возвращаемое значение из 'rand' всегда будет'

+0

Не могли бы вы рассказать о том, что вы подразумеваете под «Я хотел бы установить указатель, скажем n, для числа, поэтому всякий раз, когда я указывал n, он будет отнесен к произвольно сгенерированному числу»? Как это не просто простое назначение указателя? – e0k

ответ

2

Вы можете использовать:

#include <time.h> 
srand(time(NULL)); // randomize seed 
double get_random() { return (double)rand()/(double)RAND_MAX; } 
n = get_random(); 

srand() устанавливает семя, который используется для генерации rand псевдослучайных чисел. Если вы не вызываете srand перед первым звонком до rand, это как если бы вы звонили srand(1) (используется по умолчанию).

Если вы хотите исключить [1] использовать:

(double)rand()/(double)((unsigned)RAND_MAX + 1); 

Полное решение:

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

double get_random() { return ((double)rand()/(double)RAND_MAX); } 

int main() 
{ 
    double n = 0; 
    srand(time(NULL)); // randomize seed 
    n = get_random(); // call the function to get a different value of n every time 

    printf("%f\n", n); // print your number 
    return 0; 
} 

Каждый раз, когда вы запускаете его, вы получите другой номер для n.

+1

Спасибо Идос. Я не знаю, кто дал нисходящее движение, хотя ... У меня все еще нет возможности повышать, потому что у меня еще нет репутации 15 ... Я тогда попытался распечатать n, но, у меня есть пробовал как раз в течение десятков раз, и ответ всегда 0.001215 Это потому, что я потерял его случайность после определения? –

+0

Я отредактирую свой ответ, чтобы каждый раз можно было получить новое значение для n. Попробуйте сейчас, каждый раз, когда вы вызываете get_random(), вы получите новый номер – Idos

+0

Idos, он все равно дает 0,001215 для результата ... Должен ли я добавить; после {} для определения get_random(), чтобы сделать его функциональным? –

0

Это показывает, как получить случайные действительные числа в диапазоне 0..1, но обратите внимание, что они не распределены равномерно. Есть только (RAND_MAX+1) дискретных значений.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void) { 
    int i; 
    double n; 
    srand((unsigned)time(NULL));   // seed the random num generator ONCE only 
    for(i = 0; i < 3; i++) {    // get 3 random numbers 
     n = (double)rand()/RAND_MAX;  // in the range 0 ... 1 
     printf("%f\n", n);     // use correct format specifier for the var 
    } 
    return 0; 
} 

Мой вывод программы:

0.622608 
0.814081 
0.878689 
+0

Спасибо, погода! Это сработало! –

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

  • Нет связанных вопросов^_^