Randomize()
От: tcg2  
Дата: 17.07.06 09:13
Оценка:
Ne znau gde oshibka Yje skolko vremeni bius s etim Pomogite esli znaete! Blagodaren vam bydy Napisano eto v Visual Studio 2005\Windows32 Application\compile heading\empty project.

#include "stdafx.h"
#include "time.h"
#include "stdlib.h"
#include "iostream";
using namespace std;


int main(){
Randomize;
int a = random(100);
cout << a;
return 0;
}

Spasibo!!!
Re: Randomize()
От: Testus  
Дата: 17.07.06 09:24
Оценка: -2
Здравствуйте, tcg2, Вы писали:

T>Ne znau gde oshibka Yje skolko vremeni bius s etim Pomogite esli znaete! Blagodaren vam bydy Napisano eto v Visual Studio 2005\Windows32 Application\compile heading\empty project.


T>#include "stdafx.h"

T>#include "time.h"
T>#include "stdlib.h"
T>#include "iostream";
T>using namespace std;


T>int main(){

T> Randomize;
T> int a = random(100);
T> cout << a;
T> return 0;
T>}

T>Spasibo!!!


Видно сразу человек перешёл с билдера на студию.

Нету тут такого как Randomize; — это по умолчанию будет обьявление переменой типа int с именем Randomize (если компилятор вообще это пропустит)

Есть функция rand() для которой инициализация не нужна и она возращает unsigned long число. Если тебе нужны какие либо вариации типа random(100) то тут уже сам придумывай я всегда делал rand() % 100.

P.S. а это типа подно писать транслитом?
Glück auf
Re[2]: Randomize()
От: Кодт Россия  
Дата: 17.07.06 09:48
Оценка: 1 (1) +2
Здравствуйте, Testus, Вы писали:

T>Есть функция rand() для которой инициализация не нужна и она возращает unsigned long число.


Есть функция srand(int seed) которая как раз инициализирует ГСЧ (в противном случае при каждом запуске программы будет одна и та же последовательность).
Самый простой способ — это сделать srand(time()). Если программа запускается чаще, чем раз в секунду — или в ней одновременно стартуют несколько потоков — то можно в качестве семечка использовать ещё и ID потока (это уже ОС-зависимо, для виндов ::GetCurrentThreadID()) — что-то вроде srand(time() + GetCurrentThreadID() + (++g_count)).

T> Если тебе нужны какие либо вариации типа random(100) то тут уже сам придумывай я всегда делал rand() % 100.


Получится не совсем равномерное распределение, ну да и так сойдёт. Если же хочется ГСЧ с чётко оговоренными характеристиками — то проще своё написать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Re[3]: Randomize()
От: Testus  
Дата: 17.07.06 10:28
Оценка:
Здравствуйте, Кодт, Вы писали:

на да равномерное распределение я сам писал
самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
Glück auf
Re[3]: Randomize()
От: zaufi Земля  
Дата: 17.07.06 10:35
Оценка:
Здравствуйте, Кодт, Вы писали:

T>> Если тебе нужны какие либо вариации типа random(100) то тут уже сам придумывай я всегда делал rand() % 100.


К>Получится не совсем равномерное распределение, ну да и так сойдёт. Если же хочется ГСЧ с чётко оговоренными характеристиками — то проще своё написать.


есть еще Boost Random Number Library -- не надо ничо писать -- все уже написано... и чего всех тянет на велосипедостроение...?
Re[4]: Randomize()
От: Аноним  
Дата: 17.07.06 15:16
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>есть еще Boost Random Number Library -- не надо ничо писать -- все уже написано... и чего всех тянет на велосипедостроение...?


unsigned int seed;

unsigned int Random() {
  return seed=0x0019660D*seed+0x3C6EF35F;
}


и не надо таскать за собой 30 метровый буст!
Re[4]: Randomize()
От: LuciferMoscow Россия  
Дата: 17.07.06 15:25
Оценка:
Здравствуйте, Testus, Вы писали:

T>Здравствуйте, Кодт, Вы писали:


T>на да равномерное распределение я сам писал

T>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
Это опечатка?
Re[5]: Randomize()
От: Cyberax Марс  
Дата: 17.07.06 15:36
Оценка:
Аноним wrote:
> unsigned int Random() {
> return seed=0x0019660D*seed+0x3C6EF35F;
> }
> и не надо таскать за собой 30 метровый буст!
А какое будет распределение? Уж точно не равномерное.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[6]: Randomize()
От: Аноним  
Дата: 17.07.06 16:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А какое будет распределение? Уж точно не равномерное.


Равномерное. Вне зависимости от начального seed каждое из диапазона 0...2^32-1 появится в последовательности ровно один раз.
Далее весь цикл повторится. За подробностями и способом вывода таких констант — к Кнуту.
Re[5]: Randomize()
От: Testus  
Дата: 17.07.06 16:57
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, Testus, Вы писали:


T>>Здравствуйте, Кодт, Вы писали:


T>>на да равномерное распределение я сам писал

T>>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
LM>Это опечатка?

угу .. сорри заработался ... сложив 5 величин с одинаковым распределением мы молучим нормальный закон в очень хорошем приближении... а равномерное распределение это немного не то это получаеться потом из нормального закона .... уф.... понятнее сказал?
Glück auf
Re: Randomize()
От: cod3r_200  
Дата: 17.07.06 18:22
Оценка: -2 :))
Здравствуйте, tcg2, Вы писали:

T>Ne znau gde oshibka Yje skolko vremeni bius s etim Pomogite esli znaete! Blagodaren vam bydy Napisano eto v Visual Studio 2005\Windows32 Application\compile heading\empty project.


T>#include "stdafx.h"

T>#include "time.h"
T>#include "stdlib.h"
T>#include "iostream";
T>using namespace std;


T>int main(){

T> Randomize;
T> int a = random(100);
T> cout << a;
T> return 0;
T>}

T>Spasibo!!!




Юзай CryptGenRandom() из библиотеки CryptoAPI
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Randomize()
От: LuciferMoscow Россия  
Дата: 17.07.06 19:27
Оценка:
Здравствуйте, Testus, Вы писали:

T>>>на да равномерное распределение я сам писал

T>>>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
LM>>Это опечатка?
T>угу .. сорри заработался ... сложив 5 величин с одинаковым распределением мы молучим нормальный закон в очень хорошем приближении... а равномерное распределение это немного не то это получаеться потом из нормального закона .... уф.... понятнее сказал?
Обычно складывают 10
И с моей точки зрения это не лучший способ получения нормального распределения.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[7]: Randomize()
От: Testus  
Дата: 17.07.06 21:32
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, Testus, Вы писали:


T>>>>на да равномерное распределение я сам писал

T>>>>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
LM>>>Это опечатка?
T>>угу .. сорри заработался ... сложив 5 величин с одинаковым распределением мы молучим нормальный закон в очень хорошем приближении... а равномерное распределение это немного не то это получаеться потом из нормального закона .... уф.... понятнее сказал?
LM>Обычно складывают 10
LM>И с моей точки зрения это не лучший способ получения нормального распределения.

Могу тебя заверить как человек только что получившый высшее программистко-математическое образование этот метод довольно таки точный и 10 складывать не обязательно для хорошей точности достаточно 5... больше нужно только если имеешь дело с огромными величинами (всмысле количества испытаний)....

можно конечно получить то же самое через громозкие интегралы и формулы, а смысл?
Glück auf
Re[8]: Randomize()
От: LuciferMoscow Россия  
Дата: 17.07.06 21:36
Оценка: :)
Здравствуйте, Testus, Вы писали:
<skipped>
LM>>Обычно складывают 10
LM>>И с моей точки зрения это не лучший способ получения нормального распределения.
T>Могу тебя заверить как человек только что получившый высшее программистко-математическое образование этот метод довольно таки точный и 10 складывать не обязательно для хорошей точности достаточно 5... больше нужно только если имеешь дело с огромными величинами (всмысле количества испытаний)....
T>можно конечно получить то же самое через громозкие интегралы и формулы, а смысл?
Как человек, получивший высшее математическое образование по специальности теор.вер, могу тебя заверить, что формулы там совсем не громозские
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[9]: Randomize()
От: Testus  
Дата: 17.07.06 21:43
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Как человек, получивший высшее математическое образование по специальности теор.вер, могу тебя заверить, что формулы там совсем не громозские

Всё относительно ... всё лучше взять готовые несколько величин с одинаковым распределением и сложить. Точности хватит с лихвой
Glück auf
Re[7]: Randomize()
От: RomikT Германия  
Дата: 18.07.06 09:43
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Обычно складывают 10


Я бы сказал, что чаще складывают 12 — тогда формула упрощается, уходит неприятный коэффициент. То есть если просто сложить 12 равномерно распределенных на [0,1] случайных величин то мы получим примерно гаусс с дисперсией 1.
Хотя, конечно, на скорость работы избавление от этого масштабирующего коэффициента не влияет, сам rand() дольше считать чем лишний раз умножить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.