Warum generiert rand() % 100 eine Zufallszahl zwischen 0 und 99 ?
-
Hallo Leute .
Ich habe mich grade gefragt warum die Random Funktion eigentlich
bei der Modulo Operation %n einen random generierten Wert von n- 1 zurück gibt.
Die Random funktion wählt doch eine Zahl aus dem Intervall von 0 bis 32767 (so ungefähr).Berechne ich anhand dieser Zahl einmal den MaximalWert komme ich allerdings nur auf 67 Werte .
Warum bekomme ich jetzt aber eine Random Zahl aus dem Intervall 0 -99?
-
rand gibt eine Zufallszahl zurück. Möglicherweise auch die 17899.
-
bei der Modulo Operation %n einen random generierten Wert von n- 1 zurück gibt.
Weil 100 - 1 eben 99 ist und 0 % 100 eben 0.
Berechne ich anhand dieser Zahl einmal den MaximalWert komme ich allerdings nur auf 67 Werte .
Zeig doch mal deine Rechnung ...
-
Ach , oh gott , stimmt !
Die Modulo Operation hat ja keinen linearen Anstieg , stimmt.
Wenn ich das von meinem x abhängig mache rand(x).Ok , dann ist das klar.
Danke .
-
modulo ? linearer anstieg? HÄÄH?
Modulo rechnet den Ganzahligen Rest der Division aus:
irgendnezufallszahl % 100 ist entweder durch 100 glatt Teilbar dann REST 0
oder nicht glatt durch 100 Teilbar dann kann der rest irgendwas zwischen 1 und 99 sein, Rest 100 wäre ja wieder glatt Teilbar!
Liestdu hier: http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ wirste von schlau(er)!
-
Ja im Intervall von 0 bis 99 hat sie nen Linearen Anstieg.
Gibst du in Matlab ein, wirst du schlau(er).Ich habs ja jetzt verstanden .
PS: Das man hier immer gleich so dumm gemacht wird ist teilweise echt
ätzend.Soziale Kompetenzen sind hier wohl öfters Mangelware.
Es ist doch nicht zu viel verlangt , das einfach mal eine kurze konstruktive Antwort gegeben wird , viele von den Usern machen das ja auch , aber viele eben nicht , und das ist echt schade , denn dafür ist ein Forum ja eigentlich da.
-
Ja, was wären wir ohne Software für tausende von Euronen
-
Bacid90210 schrieb:
ätzend.Soziale Kompetenzen
...
verlangt , dashttp://de.wikipedia.org/wiki/Plenk
FYI
-
Bacid90210 schrieb:
Ich habs ja jetzt verstanden.
Sieht eher so aus, als würdest Du grundsätzlich etwas komplett durcheinander werfen. Und anderen soziale Kompetenzen absprechen ist auch nicht nett. Besonders, wenn man Hilfe bekommt, schreibt, dass man es ja eigentlich verstanden hat, und trotzdem weiter wirres Zeug von sich gibt. Dank Matlab muss man ja Gott sei dank nicht mehr darüber nachdenken, was Operationen eigentlich machen
.
-
hättest du den link studiert, hättest du gesehen das rand() einen Wert zwischen 0 und RAND_MAX generiert ... dieser ist implementationsabhängig aber MINDESTENS 2^15-1 (das hängt mit 2 byte signed integer usw zusammen). Wenn du wissen willst welche Werte dein rand() maximal macht:
std::cout << RAND_MAX;
(und vorher den <cstdlib> includieren).Bacid90210 schrieb:
Ich habe mich grade gefragt warum die Random Funktion eigentlich
bei der Modulo Operation %n einen random generierten Wert von n- 1 zurück gibt.Wenn dich solche Fragen plagen, warum nicht einfach:
for (int i=0; i< 11; ++i) std::cout << i << " % 10 = " << i%10 << "\n"; std::cout<< std::endl;
Das wäre schneller gegangen und hätte deine Neugier befriedigt. Von Stetigkeit zu sprechen bei einer Methode die du auf Integer loslässt ist .... komisch. Aber man könnte
rand() % n
natürlich als eine auf positiven natürlichen Zahlen im Intervall [0...n] stetige Funktion ansehen ... du könntest sie auch als periodisch im Intervall [x*n ... y*n] für x,y in positiven Natürliche Zahlen ansehen oder sie als Sägezahnförmig oder was auch immer titulieren