Lothar M. schrieb:
> m. g. schrieb:
>> Was mache ich falsch?
> Du initialisierst den Zufallsgenerator nicht mit einer Zufallszahl. Und
> rand() berechnet immer nur eine Zufallszahl aus der /vorherigen/
> Zufallszahl. Wenn du also immer mit 0 startest, kommt als nächste Zahl
> immmer 5...
Wo steht denn im Source, dass er immer mit 0 startet? Dann müsste er
auch vor jedem rand() erst seed() mit 0 aufrufen. Tut er aber nicht.
rand() berechnet die nächste Zufallszahl aus rand(). Wenn die immer
gleich wäre, kannst Du rand() in die Tonne kloppen. Daher tippe ich
weiter auf den Simulator, der schon in vielen AVR-Threads der böse Bube
war.
Habe den obigen Source leicht geändert für Linux:
1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <stdint.h>
|
4 |
|
5 | uint16_t zufallszahl, zz, wuerfelzahl, eins=0, zwei=0, drei=0, vier=0, fuenf=0, sechs=0;
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | uint16_t i;
|
10 |
|
11 | for (i=0; i<10000; i++)
|
12 | {
|
13 | zufallszahl = rand();
|
14 | zz = zufallszahl % 6;
|
15 | wuerfelzahl = zz + 1;
|
16 |
|
17 | if (wuerfelzahl == 1)
|
18 | eins ++;
|
19 | else if (wuerfelzahl == 2)
|
20 | zwei ++;
|
21 | else if (wuerfelzahl == 3)
|
22 | drei ++;
|
23 | else if (wuerfelzahl == 4)
|
24 | vier ++;
|
25 | else if (wuerfelzahl == 5)
|
26 | fuenf ++;
|
27 | else if (wuerfelzahl == 6)
|
28 | sechs ++;
|
29 | }
|
30 | printf ("%d %d %d %d %d %d\n", eins, zwei, drei, vier, fuenf, sechs);
|
31 | return 0;
|
32 | }
|
Ergebnis:
1 | $ cc rand.c -o rand && ./rand
|
2 | 1655 1694 1761 1595 1671 1624
|
Also schön verteilt.