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.
Здравствуйте, 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.
Здравствуйте, Testus, Вы писали:
T>Есть функция rand() для которой инициализация не нужна и она возращает unsigned long число.
Есть функция srand(int seed) которая как раз инициализирует ГСЧ (в противном случае при каждом запуске программы будет одна и та же последовательность).
Самый простой способ — это сделать srand(time()). Если программа запускается чаще, чем раз в секунду — или в ней одновременно стартуют несколько потоков — то можно в качестве семечка использовать ещё и ID потока (это уже ОС-зависимо, для виндов ::GetCurrentThreadID()) — что-то вроде srand(time() + GetCurrentThreadID() + (++g_count)).
T> Если тебе нужны какие либо вариации типа random(100) то тут уже сам придумывай я всегда делал rand() % 100.
Получится не совсем равномерное распределение, ну да и так сойдёт. Если же хочется ГСЧ с чётко оговоренными характеристиками — то проще своё написать.
на да равномерное распределение я сам писал
самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
Здравствуйте, Кодт, Вы писали:
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;
}
Здравствуйте, Testus, Вы писали:
T>Здравствуйте, Кодт, Вы писали:
T>на да равномерное распределение я сам писал T>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер
Это опечатка?
Аноним 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 появится в последовательности ровно один раз.
Далее весь цикл повторится. За подробностями и способом вывода таких констант — к Кнуту.
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Testus, Вы писали:
T>>Здравствуйте, Кодт, Вы писали:
T>>на да равномерное распределение я сам писал T>>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер LM>Это опечатка?
угу .. сорри заработался ... сложив 5 величин с одинаковым распределением мы молучим нормальный закон в очень хорошем приближении... а равномерное распределение это немного не то это получаеться потом из нормального закона .... уф.... понятнее сказал?
Здравствуйте, Testus, Вы писали:
T>>>на да равномерное распределение я сам писал T>>>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер LM>>Это опечатка? T>угу .. сорри заработался ... сложив 5 величин с одинаковым распределением мы молучим нормальный закон в очень хорошем приближении... а равномерное распределение это немного не то это получаеться потом из нормального закона .... уф.... понятнее сказал?
Обычно складывают 10
И с моей точки зрения это не лучший способ получения нормального распределения.
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Testus, Вы писали:
T>>>>на да равномерное распределение я сам писал T>>>>самый простой способ сложить около 5 равновероятных распределений (но чем больше тем точнее... хотя очень большая точность не нужна) и получиться равномерной распредление... а от туда и до кривой Гауса недалеко ... эех тервер тервер LM>>>Это опечатка? T>>угу .. сорри заработался ... сложив 5 величин с одинаковым распределением мы молучим нормальный закон в очень хорошем приближении... а равномерное распределение это немного не то это получаеться потом из нормального закона .... уф.... понятнее сказал? LM>Обычно складывают 10 LM>И с моей точки зрения это не лучший способ получения нормального распределения.
Могу тебя заверить как человек только что получившый высшее программистко-математическое образование этот метод довольно таки точный и 10 складывать не обязательно для хорошей точности достаточно 5... больше нужно только если имеешь дело с огромными величинами (всмысле количества испытаний)....
можно конечно получить то же самое через громозкие интегралы и формулы, а смысл?
Здравствуйте, Testus, Вы писали:
<skipped> LM>>Обычно складывают 10 LM>>И с моей точки зрения это не лучший способ получения нормального распределения. T>Могу тебя заверить как человек только что получившый высшее программистко-математическое образование этот метод довольно таки точный и 10 складывать не обязательно для хорошей точности достаточно 5... больше нужно только если имеешь дело с огромными величинами (всмысле количества испытаний).... T>можно конечно получить то же самое через громозкие интегралы и формулы, а смысл?
Как человек, получивший высшее математическое образование по специальности теор.вер, могу тебя заверить, что формулы там совсем не громозские
Здравствуйте, LuciferMoscow, Вы писали:
LM>Как человек, получивший высшее математическое образование по специальности теор.вер, могу тебя заверить, что формулы там совсем не громозские
Всё относительно ... всё лучше взять готовые несколько величин с одинаковым распределением и сложить. Точности хватит с лихвой
Здравствуйте, LuciferMoscow, Вы писали:
LM>Обычно складывают 10
Я бы сказал, что чаще складывают 12 — тогда формула упрощается, уходит неприятный коэффициент. То есть если просто сложить 12 равномерно распределенных на [0,1] случайных величин то мы получим примерно гаусс с дисперсией 1.
Хотя, конечно, на скорость работы избавление от этого масштабирующего коэффициента не влияет, сам rand() дольше считать чем лишний раз умножить.