Случайное число с плавающей точкой

Я написал эту функцию, чтобы получить псевдо-случайное поплавок между 0 .. 1 включительно:

float randomFloat() { float r = (float)rand()/(float)RAND_MAX; return r; } 

Однако он всегда возвращает 0.563585. Такое же количество независимо от того, сколько раз я запускаю консольное приложение.

РЕДАКТИРОВАТЬ:

Вот мое приложение в случае необходимости:

 #include  #include  float randomFloat() { float r = (float)rand() / (float)RAND_MAX; return r; } int main(int argc, char *argv[]) { float x[] = { 0.72, 0.91, 0.46, 0.03, 0.12, 0.96, 0.79, 0.46, 0.66, 0.72, 0.35, -0.16, -0.04, -0.11, 0.31, 0.00, -0.43, 0.57, -0.47, -0.72, -0.57, -0.25, 0.47, -0.12, -0.58, -0.48, -0.79, -0.42, -0.76, -0.77 }; float y[] = { 0.82, -0.69, 0.80, 0.93, 0.25, 0.47, -0.75, 0.98, 0.24, -0.15, 0.01, 0.84, 0.68, 0.10, -0.96, -0.26, -0.65, -0.97, -0.03, -0.64, 0.15, -0.43, -0.88, -0.90, 0.62, 0.05, -0.92, -0.09, 0.65, -0.76 }; int outputs[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; int patternCount = sizeof(x) / sizeof(int); float weights[2]; weights[0] = randomFloat(); weights[1] = randomFloat(); printf("%f\n", weights[1]); float learningRate = 0.1; system("PAUSE"); return 0; } 

    Вам нужно позвонить

     srand(time(NULL)); 

    перед использованием rand в первый раз. time находится в .

    EDIT: Как отмечает Джонатан Леффлер, это легко предсказать, поэтому не пытайтесь использовать его для криптографии.

    Это связано с тем, что случайный генератор C является псевдослучайным генератором (и, кстати, BTW, очень хорошо, со многими приложениями). (Для стандарта ANSI C требуется такой псевдослучайный генератор)

    По сути, каждый раз, когда консольное приложение перезапускается, оно использует одно и то же [по умолчанию] семя для случайного генератора .

    добавив строку типа

      srand(time(NULL)); 

    вы будете получать отдельное семя каждый раз, и последовательность числа, созданного с соответствующим изменением.
    Примечание : вам нужно только вызвать srand () один раз, а не каждый раз, когда вы вызываете rand ().

    Изменить : (подсказка Test / Debug-time)
    [из замечания Артелиуса] Для целей тестирования лучше всего srand (SOME_CONST) и изменить значение константы между прогонами. Таким образом, если ошибка проявляется из-за некоторой комбинации случайных чисел, вы сможете воспроизвести ее.

    drand48 идеально подходит для вашего использования, лучше, чем (float)rand()/RAND_MAX , потому что

    Функции drand48() и erand48() возвращают неотрицательные значения с плавающей точкой с двойной точностью, равномерно распределенные по интервалу [0.0, 1.0].

     #include  #include  #include  int main() { int i; srand48(time(NULL)); for (i = 0; i < 10; i++) printf("%g\n", drand48()); return 0; } 

    Вы должны инициализировать случайное семя с помощью

     void srand ( unsigned int seed ); 

    Вы можете взять, например, системное время.

    Вы называете это более одного раза? rand () всегда будет возвращать одно и то же псевдослучайное. Вы можете вызвать srand () с хорошим семенем, например текущим временем.