Toon posts:

[c++] random en randmax

Pagina: 1
Acties:
  • 217 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo

Ik wil een random functie maken die een random getal pakt tussen 1 en 9 hoe krijg ik dit voor elkaar...

Ik las iets in de msdn help over rand_max maar dat krijg ik niet lekker aan de praat

[edit]
was de 9 vergeten

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Hoe wil je nou een random getal tussen 1 pakken :?

  • Exirion
  • Registratie: Februari 2000
  • Laatst online: 09:39

Exirion

Gadgetfetisjist

Op zondag 16 september 2001 13:36 schreef ACM het volgende:
Hoe wil je nou een random getal tussen 1 pakken :?
Dat kan niet, want het zijn altijd integer functies. Je kunt wel bijvoorbeeld een heel groot getal als range nemen zodat je een getal tussen 0 en N krijgt, dan zet je dat getal om naar een double. Die double deel je dan door N zodat je een getal tussen 0 en 1 krijgt.

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


Verwijderd

Topicstarter
Op zondag 16 september 2001 13:36 schreef ACM het volgende:
Hoe wil je nou een random getal tussen 1 pakken :?
oeps bedoelde tussen 1 en 9

  • Exirion
  • Registratie: Februari 2000
  • Laatst online: 09:39

Exirion

Gadgetfetisjist

Op zondag 16 september 2001 13:40 schreef Dwergje het volgende:
oeps bedoelde tussen 1 en 9
Maar wel een geheel getal? Of toch floating point?

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


Verwijderd

Topicstarter
Op zondag 16 september 2001 13:41 schreef Exirion het volgende:

[..]

Maar wel een geheel getal? Of toch floating point?
yup en ook een geheel getal

  • tomato
  • Registratie: November 1999
  • Niet online
Op zondag 16 september 2001 13:42 schreef Dwergje het volgende:

[..]

yup en ook een geheel getal
:?
You lost me there...

  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Een random functie: wacht ik zal er een verzinnen :)

#include <cstdlib>

int mrand(int b,int c)
{
return(rand()%(c-b)+b);
}

Have fun

Verwijderd

Topicstarter
Op zondag 16 september 2001 13:43 schreef tomato het volgende:

[..]

:?
You lost me there...
nou ik moet een random functie hebben die een geheel getal tussen de 1 en 9 terug geeft.
De 1 en 9 zelf mogen ook "terug gegeven" worden

uhm zo beter?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 16 september 2001 13:43 schreef Dwergje het volgende:
nou ik moet een random functie hebben die een geheel getal tussen de 1 en 9 terug geeft.
De 1 en 9 zelf mogen ook "terug gegeven" worden

uhm zo beter?
Nou... alvast een hint dan:
random(8);

en daar moet je nog wat bij optellen om ervoor te zorgen dat ie niet 0-8 maar 1-9 pakt...


[edit]
Maar volgens `man random` kan dat niet?
Dan zul je met de hint van XTerm verder moeten spelen als dat zo blijkt te zijn :)

Verwijderd

Topicstarter
Op zondag 16 september 2001 13:44 schreef ACM het volgende:

[..]

Nou... alvast een hint dan:
random(8);

en daar moet je nog wat bij optellen om ervoor te zorgen dat ie niet 0-8 maar 1-9 pakt...
dat heb ik al geprobeerd en dat geeft een error kent random niet.... moet ik een speciaal biobliotheek gebruiken ofzo? en het is trouwens ook visual c++...

  • Exirion
  • Registratie: Februari 2000
  • Laatst online: 09:39

Exirion

Gadgetfetisjist

Op zondag 16 september 2001 13:44 schreef ACM het volgende:
Nou... alvast een hint dan:
random(8);

en daar moet je nog wat bij optellen om ervoor te zorgen dat ie niet 0-8 maar 1-9 pakt...
En daar sluit ik me bij aan. Ik kan ook niet anders aangezien ik de bron van ACM b... ehh.. ken :P

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


  • Exirion
  • Registratie: Februari 2000
  • Laatst online: 09:39

Exirion

Gadgetfetisjist

Zoek met Google op "visual c random" en je vindt bijvoorbeeld:

http://forums.about.com/n/main.asp?webtag=ab-cplus&nav=start&msg=1140.1
Hi again..I have another question..
How can i generate a random integer? Ie one that is between 0 - 9,
inclusive.
Thanks for the help
-regards Pointybeard
Doorbladeren voor antwoorden.

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Probeer mijn functie eens, die gebruikt de C library. (Jij hebt die ook). Als je een getal tussen 1-10 wilt maken moet je
mrand(1,10); doen en dat return dan een random getal tussen 1 en 10. Zorg wel altijd dat b kleiner is dan c.

  • tomato
  • Registratie: November 1999
  • Niet online
Op zondag 16 september 2001 13:57 schreef XTerm89D het volgende:
Probeer mijn functie eens, die gebruikt de C library. (Jij hebt die ook). Als je een getal tussen 1-10 wilt maken moet je
mrand(1,10); doen en dat return dan een random getal tussen 1 en 10. Zorg wel altijd dat b kleiner is dan c.
rand()%N schijnt niet de mooiste manier te zijn (http://www.eskimo.com/~scs/C-faq/q13.16.html) ;)

  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Oh jee,

nu gaan ze weer met assembler komen.
Der is een manier maar die staat in de manpage van rand.

Als je zin hebt zoek een met google naar de GNU Linux Man pages , functie "rand" -> 'The C programmers guide'
daar staat een "mooie" manier.

Verwijderd

Topicstarter
Op zondag 16 september 2001 13:54 schreef Exirion het volgende:
Zoek met Google op "visual c random" en je vindt bijvoorbeeld:

http://forums.about.com/n/main.asp?webtag=ab-cplus&nav=start&msg=1140.1
[..]

Doorbladeren voor antwoorden.
thnx!! daar heb ik het gevonden

  • hutmannetje
  • Registratie: April 2001
  • Laatst online: 21-09 11:29
Dis handig, dit moest ik toevallig ook gebruiken voor een programmatje dat ik moest schrijven voor school. ;)
Dan heb ik ook meteen een beginetje, Thanks he :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op zondag 16 september 2001 14:06 schreef XTerm89D het volgende:
Oh jee,

nu gaan ze weer met assembler komen.
Dat gebeurt over het algemeen pas zodra ik iets in een topic heb gepost.

(oh jee nu komt het... :D )

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

hoor ik daar asm?
zie ik daar curry?

;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 01:50 schreef OiSyN het volgende:
hoor ik daar asm?
zie ik daar curry?
JA!!! WE GAAN DE CURRY(tm) BENCHMARK-CODE WEER VAN STAL HALEN!!!

MARCUSK, OISYN, YARVIEH, OLAFVDSPEK: HET IS WEER PAAAAAAARTY-TIME!!!!



;)

Professionele website nodig?


Verwijderd

Ik gister nog bezig geweest in die benchmark code , ik had het geniale idee door m'n job scheduling class op 9 te zetten ik inprinciepe unlimited quantum time units zou moeten krijgen om zo zonder threadswitches te lopen, maar zoveel mazzel had ik niet, vraag me af wat er dan nog op een hoger prio loopt dan mijn process?! zal de code ook nog even posten wellicht zie ik wat over het hoofd :?
code:
1
2
3
4
5
6
7
8
9
10
    HANDLE hToken;
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
    SetPrivilege(hToken,SE_INC_BASE_PRIORITY_NAME,true );
    HANDLE hjob = CreateJobObject(NULL, NULL);
    JOBOBJECT_BASIC_LIMIT_INFORMATION jobli = { 0 };
    jobli.PriorityClass =REALTIME_PRIORITY_CLASS; 
    jobli.SchedulingClass =9;
    jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_SCHEDULING_CLASS ;
    SetInformationJobObject(hjob, JobObjectBasicLimitInformation, &jobli,sizeof(jobli));
    AssignProcessToJobObject(hjob,GetCurrentProcess());

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Je vraagt je toch af waarom ieder n00b-topic op dit forum tegenwoordig gegarandeerd wel ergens uitloopt in een asm of lowlevel OS-hacking discussie... :)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 02:11 schreef Yarvieh het volgende:
vraag me af wat er dan nog op een hoger prio loopt dan mijn process?!
Idee: de NT task scheduler? :P

Ik denk dat je veels te moeilijk aan het doen bent met die job objects... zit net een stuk in MSDN door te lezen ('Real-Time Systems and Microsoft Windows NT') en volgens dat stuk zijn realtime processen best mogelijk, maar dan moet je priorityclass 31 hebben. En om dat te bereiken waren we sowieso de locale threadpriority nog vergeten in die benchmarkcode (en jij ook in bovenstaande code). Het process moet op REALTIME, en de thread moet op TIME_CRITICAL. Oftewel:
code:
1
2
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

Volgens MSDN houdt Time Critical thread priority het volgende in: 'Indicates a base priority level of 15 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 31 for REALTIME_PRIORITY_CLASS processes.

Oftewel met deze code komen we uit op priority 31, wat volgens eerdergenoemd artikel het hoogst mogelijke is op een NT-systeem. Zolang deze code niet 'yield' oftewel een kernelmode wait ergens doet, KAN hij niet switchen, er is immers geen hogere prioriteitsactiviteit (buiten de kernel zelf).

Ook interessant: in MSDN de pagina 'Scheduling Priorities' over de relatieve impact van priority classes en thread priorities. Deze meldt dat we bij de oude code uitkwamen op:
24 : REALTIME_PRIORITY_CLASS + THREAD_PRIORITY_NORMAL

Op 22-26 hangen de systemlevel tasks zoals muis en disk syncing rond, wat dus zou verklaren dat we soms inderdaad nog een task switch kregen.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

ja maar dit pastte ik dus toe in mijn matrix benchmark (geloof ik :?), en nog had ik taskswitching...

maar das waarschijnlijk gewoon een stukje scheduler, maar wordt er niet geswitched


overigens, misschien is het beter de executietijd van de thread op te vragen? Met clock () bijvoorbeeld (heb de msdn effe niet bij de hand, ik zit in een frisse XP install nu)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op maandag 17 september 2001 02:15 schreef curry684 het volgende:
Je vraagt je toch af waarom ieder n00b-topic op dit forum tegenwoordig gegarandeerd wel ergens uitloopt in een asm of lowlevel OS-hacking discussie... :)
misschien hebben de gezellige mensen elkaar gevonden op dit forum :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Mja 'k zat windows 2000 internals te lezen en bij een verhaal over het job object stond dat je met 'n scheduling class van 9 unlimited units kreeg, ik denk *DAT* moeten we hebben. dan maar wat anders verzinnen, is cli/sti toegestaan als we in ring 0 zitten? Anders zouden we een kernel mode driver kunnen schrijven om onze code te benchen zonder threadswitches >:)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 02:37 schreef OiSyN het volgende:
overigens, misschien is het beter de executietijd van de thread op te vragen? Met clock () bijvoorbeeld (heb de msdn effe niet bij de hand, ik zit in een frisse XP install nu)
Je zoekt deze:
GetProcessTimes
The GetProcessTimes function obtains timing information about a specified process.
code:
1
2
3
4
5
6
7
8
BOOL GetProcessTimes(
  HANDLE hProcess,       // specifies the process of interest
  LPFILETIME lpCreationTime, // when the process was created
  LPFILETIME lpExitTime,     // when the process exited
  LPFILETIME lpKernelTime,   // time the process has spent in kernel
                     // mode
  LPFILETIME lpUserTime // time the process has spent in user mode
);
Is inderdaad ook een idee natuurlijk... ik ga 'm nu niet meer ombouwen overigens (morgen weer werk... :) )

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 02:38 schreef OiSyN het volgende:
misschien hebben de gezellige mensen elkaar gevonden op dit forum :)
Jaaaa, het is op feestjes ook altijd zo'n sterke binnenkomer als ik ga vertellen over welke bugs me die dag op m'n werk dwarszaten!

:)

Professionele website nodig?


Verwijderd

Misschien moet je ons wat meer uitnodigen op jouw feestjes dan :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

feestjes?! waar?! :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1