|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.04.2012, 10:53 | #1 |
Регистрация: 23.03.2012
Сообщений: 3
|
Конгруэнтный метод
Приветствую!
Задался вопросом реализации своего ГСЧ и нашел прекрасный метод предложенный Кнутом. Также нашел его реализацию для плюсов - прирост быстродействия был такой: стандартный рандом ~5.3 сек., конгруэнтный метод ~0.2 сек. (сравнение на 10000 итерациях). Для C# нашел также реализацию этого метода, но... не только прироста нет, но и, наоборот, работает медленнее.. Может кто-то реализовывал свои более быстрые варианты рандома?? Вот код реализации конгруэнтного метода ГСЧ: Код:
|
24.04.2012, 11:11 | #2 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Int64.Parse(DateTime.Now.Ticks.ToSt ring());
А зачем ты переводишь число в строку и обратно? Метод можно чуть оптимизировать: Код:
|
24.04.2012, 12:33 | #3 | ||
Регистрация: 23.03.2012
Сообщений: 3
|
Цитата:
Цитата:
проблему это не решает, ибо целочисленное деление остается и занимает 90% всего времени выполнения функции...((( Код:
Код:
Код:
Последний раз редактировалось hirosimarider; 24.04.2012 в 12:47. |
||
24.04.2012, 13:12 | #4 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Может, просто стандартный рандом в плюсах такой тормозной?
Можно посмотреть, как он реализован в дотнете (исходники можно скачать NetMassDownloader-ом). |
24.04.2012, 13:58 | #5 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
А код, который Вы для C++ привели отсюда взят: http://algolist.manual.ru/maths/generator/fastest.php ? Там jflone=0x3f800000=1065353216 не то-же самое, что m в формуле конгруэнтного метода. |
|
24.04.2012, 14:37 | #6 | |
Регистрация: 23.03.2012
Сообщений: 3
|
Цитата:
ну.. даже заменив на 65536 вот такие результаты получаются: С# standart = 00:00:03.0421518 kongr = 00:00:02.6766811 C++(переписал немного, чтобы честнее было) kongr = 0.383354 standart = 1.14874 Да, в плюсах рандом в 3 раза быстрее конечно... Кстати, может знает кто, время выполнения участка замеряемого кода(привел выше) и время которое тратится на сам рандом, показываемое Intel Parallel Amplifier, очень сильно разнится. Т.е.: Код:
Код:
|
|
24.04.2012, 14:48 | #7 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
(это для C#) Почему в коде C++ нет операции mod и как используется jflone. Отвечать не нужно, просто разберитесь для себя. Иначе получается, что Вы сравниваете по времени два различных генератора и делаете неверный вывод о том, что в C++ быстрее. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конструктор,метод вывода на экран Display, метод для преобразования в строку toString в Delphi | Чумак Татьяна | Помощь студентам | 6 | 03.04.2012 11:58 |
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ | Vит@x@ | Помощь студентам | 0 | 22.11.2011 10:47 |
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] | U9110 | Помощь студентам | 4 | 06.04.2011 09:48 |
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления | qsccsq | Помощь студентам | 7 | 24.12.2010 05:23 |
конгруэнтный генератор псевдослучайных чисел | cvbcvb | Помощь студентам | 0 | 10.05.2010 00:16 |