Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » RAND_MAX

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
01.06.2006, 17:02 Uhr
Drager



hoi,

ich hab folgendes problem:

mein RAND_MAX ist in der stdlib.h auf 32768 begrenzt, ich brauch aber viel grössere zahlen... aber will dabei auch keine dezimalen verlieren (sprich ein einfaches * 1000 bringt mir nix)
bis jetzt behelf ich mich mit dem trick:

rand() * 1000 + rand() % 1000;

aber hier hab ich ja 2 rand() aufrufe, dass hört sich jetzt net schlimm an, aber es ist teil eines particles-systems, und dabei wird das doch sehr häufig aufgerufen, also kann das schon ins gewicht fallen...

kennt wer ne andere möglichkeit? kann ich RAND_MAX irgendwo "einstellen"?

danke

Drager
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.06.2006, 17:35 Uhr
tobZel



Dann edetier doch einfach mal RAND_MAX auf den wert auf das maximum von unsignde long.
Guck dann mal was passiert.
--
Wer länger lebt stirb früher...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.06.2006, 18:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


mit "editieren" meint er


C++:
#undef RAND_MAX
#define RAND_MAX MAX_ULONG


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.06.2006, 19:41 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Du kannst rand zweimal aufrufen und einen der beiden aufrufe um 16 bit shiften dann hast du auch größere Zahlen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.06.2006, 20:17 Uhr
Helmut



Hi!
Wenn du keine andere Lösung findest und bereit bist dir selbst ne Funktion zu schreiben, die dann einige Zeilen Inline-Assembler enthalten würde , hät ich den Assemblercode für dich.
Ergibt sehr gute Pseudozufallszahlen!, super Speed und die Zahlenfolgen wiederholen
sich erst beim Überlauf von 32 bit signed int (2.147.483.648) .
mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.06.2006, 20:26 Uhr
Drager



hoi,

erstmal danke für die antworten

@flosoft :

hab das probiert, und der wert ist dann auch ein anderer, nur ignoriert er das beim rand()
aufruf, wo sollte ich den das hinschreiben? (ich habs bis jetzt, da wo ich die rand() aufrufe mache..)
ich wollt aber nicht in den "standard" bilbiotheken rumschreiben...


p.s. ich bin franke und darf konstrukte wie "da wo" benutzen

Dieser Post wurde am 01.06.2006 um 20:29 Uhr von Drager editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.06.2006, 22:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


einfach NACH den includes VOR deinem code. (also nicht vor dem rand, sondern nach den includes)


C++:
#include ...
#include ...

#undef RAND_MAX
#define RAND_MAX ...

//...
// z.B
int function(...)
{
  //...


--
class God : public ChuckNorris { };

Dieser Post wurde am 01.06.2006 um 22:43 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.06.2006, 23:53 Uhr
Drager



hm hatte ich gemacht, und der wert von RAND_MAX hat sich auch verändert, aber rand() ignoriert das zumindest bei mir.. naja dann mach ichs doch wohl weiterhin mit 2 rand() aufrufen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.06.2006, 08:33 Uhr
ao

(Operator)


Ist doch klar, der Wert von RAND_MAX ist fest in der C-Lib einkompiliert. Ein Umdefinieren hätte nur dann Wirkung, wenn du den Quellcode von rand () neu übersetzt.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.06.2006, 09:45 Uhr
0xdeadbeef
Gott
(Operator)


Welche antike libc hat denn RAND_MAX noch bei 32767?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: