реклама на сайте
подробности

 
 
> WINAVR rand(), не работает RAND_MAX
heburashka
сообщение Apr 19 2009, 14:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 14-04-09
Пользователь №: 47 685



Здравствуйте.

Пытаюсь заставить rand() генерить в узком диапазоне 0-9

выставлял RAND_MAX 0b00001001

в пректе и в <stdlib.h>

не работает.

help


спасибо.

Сообщение отредактировал heburashka - Apr 19 2009, 14:54
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Apr 20 2009, 06:41
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



вот ведь спорить любители smile.gif я провел тест за вас:
Код
#include <avr/io.h>

volatile uint16_t result;
volatile uint32_t temp;

int main(void){

  while(1){
    PORTB = 1; // точка 1
    result = rand() % 10;
    
    PORTB = 0; // точка 2

    temp = rand() * 10UL;
    temp >>= 15;

    PORTB = 1; // точка 3
  }
}

target = atmega16, компилятор - WinAVR, среда - AVR Studio, сборка с оптимизацией по размеру кода (-Os)

методика теста: установка точек останова (помечены в комментариях) и замер числа тактов между точками 1 и 2 и между 2 и 3 соответственно.

результаты:
между 1 и 2: 1688 тактов
между 2 и 3: 1634 тактов

выигрыш далеко не десятикратный, речь вообще не идет о целых разах (выигрыш 3%) biggrin.gif в общем, результат был ожидаемым, как zltigo и "предчувствовал" smile.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 20 2009, 08:07
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ARV @ Apr 20 2009, 10:41) *
выигрыш далеко не десятикратный, речь вообще не идет о целых разах (выигрыш 3%) biggrin.gif в общем, результат был ожидаемым, как zltigo и "предчувствовал" smile.gif

а написать так не судьба :
Код
    temp = rand() * 20UL;
    temp >>= 16;

?
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 20 2009, 08:22
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(singlskv @ Apr 20 2009, 12:07) *
а написать так не судьба :
Код
    temp = rand() * 20UL;
    temp >>= 16;
?
да в общем-то, что было ранее написано - то я и протестировал... но и этот вариант немногим лучше: 1688 и 1532 такта - выигрыш 9,2% - о разах речь просто не идет! а вот на счет распределения сомнения появляются...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 20 2009, 08:25
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ARV @ Apr 20 2009, 12:22) *
да в общем-то, что было ранее написано - то я и протестировал... но и этот вариант немногим лучше: 1688 и 1532 такта - выигрыш 9,2% - о разах речь просто не идет!
А теперь вычтите из каждого куска время работы rand(), тк нас сейчас интересует только эфективность %10
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 20 2009, 08:26
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(singlskv @ Apr 20 2009, 12:25) *
А теперь вычтите из каждого куска время работы rand(), тк нас сейчас интересует только эфективность %10
прежде приведите доказательства, что при вашем методе не искажается равномерность распределения чисел... иначе смысла говорить дальше просто нет...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 20 2009, 08:35
Сообщение #7


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ARV @ Apr 20 2009, 12:26) *
прежде приведите доказательства, что при вашем методе не искажается равномерность распределения чисел... иначе смысла говорить дальше просто нет...
Ну мы просто поделили rand() на 3276,8 равномерность при этом явно не страдает, раз
она не страдала при % 10
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 20 2009, 11:56
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(singlskv @ Apr 20 2009, 12:35) *
Ну мы просто поделили rand() на 3276,8 равномерность при этом явно не страдает, раз она не страдала при % 10
Я считаю что не стоит сильно запрягаться по поводу равномерности и эквивалентности этих операций.
Тут интересна реальная разница в скорости. Т.к. N%10 используется ну очень и очень часто и безотносительно rand().


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- heburashka   WINAVR rand()   Apr 19 2009, 14:49
- - zltigo   Цитата(heburashka @ Apr 19 2009, 17:49) П...   Apr 19 2009, 15:11
|- - heburashka   Цитата(zltigo @ Apr 19 2009, 18:11) Не на...   Apr 19 2009, 15:33
||- - zltigo   Цитата(heburashka @ Apr 19 2009, 18:31) п...   Apr 19 2009, 15:40
|||- - heburashka   Цитата(zltigo @ Apr 19 2009, 18:40) Вот и...   Apr 19 2009, 15:44
|||- - heburashka   Цитата(heburashka @ Apr 19 2009, 18:44) д...   Apr 19 2009, 15:47
|||- - zltigo   Цитата(heburashka @ Apr 19 2009, 18:44) R...   Apr 19 2009, 15:48
||- - zltigo   Цитата(heburashka @ Apr 19 2009, 18:33) э...   Apr 19 2009, 15:42
|- - singlskv   Цитата(zltigo @ Apr 19 2009, 19:11) value...   Apr 19 2009, 15:35
|- - heburashka   Цитата(singlskv @ Apr 19 2009, 18:35) Оче...   Apr 19 2009, 15:41
|- - zltigo   Цитата(heburashka @ Apr 19 2009, 18:41) н...   Apr 19 2009, 15:46
||- - heburashka   Цитата(zltigo @ Apr 19 2009, 18:46) Потом...   Apr 19 2009, 15:53
||- - zltigo   Цитата(heburashka @ Apr 19 2009, 18:53) ....   Apr 19 2009, 15:56
|- - Сергей Борщ   Цитата(heburashka @ Apr 19 2009, 18:41) н...   Apr 19 2009, 15:53
||- - heburashka   Цитата(Сергей Борщ @ Apr 19 2009, 18:53) ...   Apr 19 2009, 16:07
||- - singlskv   Цитата(Сергей Борщ @ Apr 19 2009, 19:53) ...   Apr 19 2009, 16:15
||- - zltigo   Цитата(singlskv @ Apr 19 2009, 19:15) Код...   Apr 19 2009, 16:27
||- - singlskv   Цитата(zltigo @ Apr 19 2009, 20:27) Прям ...   Apr 19 2009, 16:38
||- - zltigo   Цитата(singlskv @ Apr 19 2009, 19:38) Или...   Apr 19 2009, 16:43
||- - singlskv   Цитата(zltigo @ Apr 19 2009, 20:43) Скоре...   Apr 19 2009, 18:53
||- - zltigo   Цитата(singlskv @ Apr 19 2009, 21:53) Да,...   Apr 19 2009, 19:26
||- - singlskv   Цитата(zltigo @ Apr 19 2009, 23:26) Какое...   Apr 19 2009, 19:41
||- - zltigo   Цитата(singlskv @ Apr 19 2009, 22:41) И л...   Apr 19 2009, 19:50
||- - singlskv   Цитата(zltigo @ Apr 19 2009, 23:50) Копия...   Apr 19 2009, 20:16
||- - zltigo   Цитата(singlskv @ Apr 19 2009, 23:16) Ува...   Apr 19 2009, 20:29
||- - singlskv   Цитата(zltigo @ Apr 20 2009, 00:29) В дан...   Apr 19 2009, 20:45
||- - zltigo   Цитата(singlskv @ Apr 19 2009, 23:45) ...   Apr 20 2009, 05:59
|- - singlskv   Цитата(heburashka @ Apr 19 2009, 19:41) н...   Apr 19 2009, 16:00
- - ARV   на спидометре машины написано 0..200 км/ч. это зна...   Apr 19 2009, 16:01
- - heburashka   напоследок. RAND_MAX восстанавливать с прежним з...   Apr 19 2009, 16:19
|- - ARV   Цитата(heburashka @ Apr 19 2009, 20:19) R...   Apr 19 2009, 16:23
|- - heburashka   Цитата(ARV @ Apr 19 2009, 19:23) формальн...   Apr 19 2009, 16:32
- - heburashka   singlskv спасибо за #15 пост ! наши одно...   Apr 19 2009, 16:44
|- - zltigo   Цитата(heburashka @ Apr 19 2009, 19:44) с...   Apr 19 2009, 16:48
- - mdmitry   Осталось только получить миллион нагенерированных ...   Apr 20 2009, 09:58
|- - singlskv   Цитата(mdmitry @ Apr 20 2009, 13:58) Оста...   Apr 20 2009, 12:06
- - singlskv   А автору топика, если ему нужно только 0-9,и нужно...   Apr 21 2009, 21:23
- - heburashka   мне просто нужно было от 0-9 причем времени вагон....   Apr 25 2009, 11:57
- - singlskv   Цитата(heburashka @ Apr 25 2009, 15:57) м...   Apr 25 2009, 20:45


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016