Форум программистов, компьютерный форум CyberForum.ru

Что делает функция srand? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.82
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 18:29     Что делает функция srand? #1
референсы говорят что нужен srand() что бы rand() работал и давал разные значения каждый раз, но я его не использовал, но все равно всё ок рандом выдается каждый раз разный Оо а был ли смысл srand() ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 18:29     Что делает функция srand?
Посмотрите здесь:

Что делает функция C++
что делает функция? C++
Что делает функция strcpy(t, f) C++
Что делает функция strcat(t, f) C++
Что делает функция strcmp(s1,s2) ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.08.2010, 18:38     Что делает функция srand? #2
Owyn, да ну?!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
/* #include <time.h> */
 
int main(void){
    int i;
 
    /* srand(time(NULL)); */
 
    for ( i = 0; i < 10; ++i )
        printf("%d ", rand() % 100);
    printf("\n");
 
    return 0;
}
Что делает функция srand?
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 18:48  [ТС]     Что делает функция srand? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <windows.h>
#include <stdio.h>
#include <shlobj.h>
 
void func()
{
 float max = 15.6;
 float min = 18.6;
 for(i = 0; i < 41; i++)
 {
     float result_f = ((max-min)*((float)rand()/RAND_MAX))+min;
     logfile_f("(rand gave %f)\n", result_f);
 }
}
(rand gave 15.603754)
(rand gave 17.290756)
(rand gave 16.179913)
(rand gave 18.026222)
(rand gave 17.355028)
(rand gave 17.039619)
(rand gave 16.650875)
(rand gave 18.287888)
(rand gave 18.068520)
(rand gave 17.839815)
(rand gave 16.122324)
(rand gave 18.176830)
(rand gave 17.731504)
(rand gave 17.140606)
(rand gave 16.511986)
(rand gave 15.644954)
(rand gave 15.874209)
(rand gave 16.693356)
(rand gave 16.041939)
(rand gave 16.097696)
(rand gave 18.565575)
(rand gave 16.937077)
(rand gave 15.957250)
(rand gave 15.614008)
(rand gave 15.626735)
(rand gave 16.733641)
(rand gave 17.194988)
(rand gave 17.313553)
(rand gave 17.405293)
(rand gave 17.421497)
(rand gave 16.098703)
(rand gave 17.589136)
(rand gave 16.952368)
(rand gave 16.656368)
(rand gave 15.771117)
(rand gave 17.423054)
(rand gave 17.949957)
(rand gave 18.007820)
(rand gave 17.159649)
(rand gave 16.505852)
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.08.2010, 19:01     Что делает функция srand? #4
Owyn, насколько я понимаю, псевдослучайное число вычисляется по такому алгоритму.
Пусть С1 и С2 - некоторые константы, seed - зерно псевдослучайной последовательности. Тогда тело функции rand() могло бы выглядеть так:
C
1
2
3
4
5
int rand()
{
    seed = seed*C1 + C2;
    return seed;
}
Переменная seed имеет фиксированное значение. Значит, при каждом запуске программы будет генерироваться одна и та же последовательность псевдослучайных чисел.
А srand позволяет инициализировать зерно seed системным временем. Т.е., если ты запишешь в начале программы srand(time(NULL)) (инициализация зерна текущим временем), то можно считать, что при каждом запуске у тебя будет генерироваться уникальная последовательность

Добавлено через 11 минут
Нашел на просторах Интернета:
Генератор ANSI-C был опубликован комиссией как 'пример'. Мы его тоже приводим, но как 'не рекомендованный' для серьезных приложений.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* (в модуле stdlib.h) */
#define RAND_MAX 32767
 
/* "пример" от комитета ANSI-C */
unsigned long next=1;
 
int rand(void) {
 next=next*1103515245+12345;
 return((unsigned int)(next/65536)%32768);
}
 
void srand(unsigned int seed) {
 next=seed;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 20:41     Что делает функция srand? #5
Owyn, а теперь запустите программу еще раз и найдите 10 отличий.
Yandex
Объявления
04.08.2010, 20:41     Что делает функция srand?
Ответ Создать тему
Опции темы

Текущее время: 21:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru