>
>> Es gab hier Widersprüchliches zu lesen
>> zu hohen Ereignis-Anzahlen, die bessere Ergebnisse liefern sollen.
>> Es stimmt generell, daß viele Ereignisse zuverlässigere Ergebnisse liefern. >>
>> Nachfolgend wird gewürfelt 1..6 (kryptographisch).
>> 1+2+3+4+5+6 = 21 ; 21/6 = 3,5 (Mittelwert)
>> 1+6 = 7 ; 7/2 = 3,5 (Reihenrechnung)
>>
>> Das Ergebnis wird umso genauer, je mehr Würfel-Ereignisse vorliegen.
>> Mit 'genauer' ist gemeint, daß die Differenzen zu vorhergehenden
>> Werten fortlaufend geringer werden.
>> Das Pendeln um den genauen Mittelwert herum hat fortlaufend eine geringere Frequenz.
>> Ein Pendeln bleibt bestehen, weil der Zahlenbereich 1..6 und die Werte sehr klein sind.
>>
>> Die erste erwürfelte Zahl kann natürlich eine aus der Menge 1..6 sein. >>
>> ===========================================
>> 1 6 6.000 6.000
>> 2 3 9.000 4.500
>> 3 1 10.000 3.333
>> 4 2 12.000 3.000
>> 5 5 17.000 3.400
>> 6 2 19.000 3.167
>> 7 3 22.000 3.143
>> 8 3 25.000 3.125
>> 9 3 28.000 3.111
>> 10 5 33.000 3.300
>> 11 6 39.000 3.545
[...]
> 2996 5 10598.000 3.537
>> 2997 5 10603.000 3.538
>> 2998 1 10604.000 3.537
>> 2999 1 10605.000 3.536
>> 3000 3 10608.000 3.536
>> ===========================================
>
> Ohjeojeh,
> da hat Einer sein erstes BASIC Programm zum Laufen gebracht.
Zahlenreihen sind in der Wissenschaft besonders wichtig. Man kann oft gleich mehrere Erkenntnisse daraus ziehen.
Fullquote voll beabsichticht.
Ob diese Daten-Verdoppelung nötig war, können andere beurteilen.
Didn't find your answer? Ask the community — no account required.
V
Volker Staben
Am 08.06.2024 um 16:07 schrieb Helmut Schellong:
... manchmal ist es nicht erst die Verdoppelung, die unnötig ist.
Gruß, V.
G
Gregor Szaktilla
Am 08.06.24 um 17:20 schrieb Volker Staben:
YMMD!
Gruß
Gregor
H
Helmut Schellong
Mit Wissenschaft habt ihr Drei offenbar kaum etwas zu tun.
Ich habe bisher vielleicht 350 solche Zahlenfolgen ausgegeben, ausgewertet und Erkenntnisse daraus gewonnen. Solches ist eminent wichtig für mich - für Euch jedoch uninteressanter Kram.
-- Mit freundlichen Grüßen Helmut Schellong snipped-for-privacy@schellong.biz
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
C
Carla Schneider
formatting link
C
Carla Schneider
Wenn bei Experimenten solche Zahlenreihen herauskommen kann es sinnvoll sein herauszufinden was davon Rauschen, also Zufall ist und was die eigentliche Information.
H
Helmut Schellong
Ich wußte bisher nicht, daß dazu WP-Artikel existieren.
for n from 1 to 3000 repeat do let "r= random(6)+1" z=$r.0 let "s+=$z" "m=s/$n.0" echo $n $r $s $m done ================================================
Ich will primär die Qualität des Generators (PRNG) direkt und konkret testen. Der Algorithmus hat jedoch einen Fehler, der die Resultate leicht verfälscht. Ich werde später mehr dazu schreiben.
Die (6) bedeutet, daß Zahlen von 0..5 ausgegeben werden. Die +1 dahinter ist der Fehler.
H
Helmut Schellong
Siehe mein Posting von 12:16.
H
Helmut Schellong
Es liegt doch kein Fehler vor, wie ich durch weitere Zahlenfolgen mit erweitertem Skript feststellte.
for n from 1 to 400000 repeat do let "r= random(6)+1" let "s+=$r.0" "m=s/$n.0" echo $n $r $s $m cmpv m m0 run? "let ++e" "e=0; m0=$m" let "e>=50" && break done ================================================== Das Skript bricht nun ab, sobald 50 gleiche Mittelwerte hintereinander ausgegeben wurden. Es ist interessant, mathematisch einen optimalen Abbruchwert zu errechnen. Eine Formel dafür müßte entwickelt werden. Der Abbruchwert 50 wurde heuristisch festgelegt.
Hinter random() steckt der Algorithmus 'Spritz' (PRNG). Die sehr hohe Qualität der Ausgabe ist durch die nachfolgende Zahlenfolge belegt. Nach spätestens etwa 10000 Ereignissen steht der Mittelwert mit genügender Genauigkeit fest.
verschiedene Tests die alle bestanden werden muessen.
Fuers Wuerfeln sind doch Zahlen von 1..6 noetig da ist eins zu addieren genau das richtige.
Vom Generator fordert man dass z.B. alle Zahlen die gleiche Wahrscheinlichkeit haben. Das ist aber nicht ausreichend, denn das bekaeme man auch mit einer sich dauernd wiederholenden Reihe der 6 Zahlen, z.B. 123456123456123456 die ueberhaupt nicht zufaellig ist.
Also koennte man auch noch testen ob alle Kombinationen aus zwei aufeinander folgenden Zahlen die gleichen Wahrscheinlichkeiten haben und alle dreier-kombinationen usw oder auch
Pseudozufallsgeneratoren sind prinzipiell nicht ganz zufaellig, nach einer gewissen Zahl wiederholen sie sich. Man kann sie aber so bauen dass das praktisch nicht vorkommt weil man soviele Zahlen in vernuenftiger Zeit nicht erzeugen kann...
C
Carla Schneider
Es kann schon sein dass der Algorithmus gut ist, aber dein Test wuerde auch einen Algorithmus der einfach 123456123456123456... ausgibt fuer noch besser befinden. Es ist sinnvoller die Zahlen selbst zu testen als den Mittelwert, also z.B. ihre Haeufigkeiten aufzusummieren, oder besser die Haeufigkeit von Zahlenpaaren, dann faellt die 123456123... Folge sofort auf.
Eigentlich muesste die letzte Zahl ja 3.500 sein, das ist sie aber nicht weil du nicht genug Zahlen genommen hast, wegen deines Abbruchkriteriums. Probiere mal was bei 100000 1000000 10000000 Zahlen herauskommt.
C
Carla Schneider
...
Der Sinn diese Tabelle zu posten kann ja wohl nur darin liegen dass ein Leser diese Tabelle auswertet mit einem Computerprogramm. Programmieren kostet aber Zeit und die ist nicht umsonst, also hier mal ein alternativer Zugang mit chatgpt
Erster Versuch:
----- write a c program that reads lines from stdin and converts the first two space separated items in each line to integers and calls a function fuff with these Integers as parameters
-----
Er gibt mir ein Programm das genau das tut:
------ #include <stdio.h>
#include <stdlib.h>
// Function prototype void fuff(int a, int b);
int main() { char line[256];
// Read lines from stdin while (fgets(line, sizeof(line), stdin)) { int num1, num2;
// Extract the first two space-separated integers if (sscanf(line, "%d %d", &num1, &num2) == 2) { // Call the function fuff with these integers fuff(num1, num2); } else { printf("Invalid input line: %s", line); } }
return 0; }
// Define the function fuff void fuff(int a, int b) { // Example implementation: just print the numbers printf("fuff called with: %d and %d\n", a, b); }
------
Ich wollte das programm jetzt so modifizieren dass er ein Histogramm von num2 macht... Aber warum nicht chatgpt noch mehr Arbeit uebertragen:
-------- treat num2 as a random variable with the values 1 2 3 4 5 6 and put some tests in the orogram that tests if it its distribution
-------
Das hat er dann leider falsch verstanden... Also habe ich ihm noch geschrieben:
------- do not generate random numbers but test if the input numbers are random
------- Er gibt mir folgendes Programm:
-------- #include <stdio.h>
#include <stdlib.h>
// Function prototype void fuff(int a, int b);
int main() { char line[256]; int counts[6] = {0}; // Array to count occurrences of 1, 2, 3, 4, 5, 6 int totalLines = 0;
// Read lines from stdin while (fgets(line, sizeof(line), stdin)) { int num1, num2;
// Extract the first two integers if (sscanf(line, "%d %d", &num1, &num2) == 2) { // Check if num2 is within the valid range (1-6) if (num2 >= 1 && num2 <= 6) { // Increment the count for this num2 value counts[num2 - 1]++; // Call the function fuff with these integers fuff(num1, num2);
// Increment the total number of lines processed totalLines++; } else { printf("Invalid num2 value: %d (must be between 1 and 6)\n", num2); } } else { printf("Invalid input line: %s", line); } }
// Print the counts for each num2 value printf("Distribution of num2 values:\n"); for (int i = 0; i < 6; i++) { printf("%d: %d times\n", i + 1, counts[i]); }
// Calculate the expected count for a uniform distribution double expected = totalLines / 6.0; double chi_squared = 0.0;
// Perform the chi-squared test for (int i = 0; i < 6; i++) { double observed = counts[i]; chi_squared += (observed - expected) * (observed - expected) / expected; }
// Chi-squared critical value for 5 degrees of freedom at 0.05 significance level is 11.070 if (chi_squared < 11.070) { printf("The distribution appears to be uniform.\n"); } else { printf("The distribution does not appear to be uniform.\n"); }
return 0; }
// Define the function fuff void fuff(int a, int b) { // Example implementation: just print the numbers printf("fuff called with: %d and %d\n", a, b); }
--------
Der gesamte Chat ist hier einsehbar:
formatting link
Die Funktion fuff() habe ich aus dem Programm entfernt und das dann auf deine Zahlen losgelassen:
cat inputdat.txt | ./wrfltst Das ist das Ergebnis:
------- Distribution of num2 values:
1: 492 times
2: 479 times
3: 486 times
4: 513 times
5: 532 times
6: 498 times Chi-squared statistic: 3.796000 The distribution appears to be uniform.
-------
Zum Test habe ich jetzt mal die Eingangszahlen verfaelscht, indem jede 6 6 6 Folge zu einer 6 6 1 Folge gemacht wird:
Also das Programm veraendert:
-------
int lnum2 =0; int llnum2=0; // Read lines from stdin while (fgets(line, sizeof(line), stdin)) { int num1, num2,xnum2;
// Extract the first two integers if (sscanf(line, "%d %d", &num1, &num2) == 2) { // Check if num2 is within the valid range (1-6) if (num2 >= 1 && num2 <= 6) { // Increment the count for this num2 value xnum2=num2; if((num2==6) && (lnum2==6) && (llnum2==6)) xnum2=1; counts[xnum2 - 1]++; llnum2=lnum2; lnum2=num2;
-------
Und heraus kommt:
------- Distribution of num2 values:
1: 515 times
2: 479 times
3: 486 times
4: 513 times
5: 532 times
6: 475 times Chi-squared statistic: 5.360000 The distribution appears to be uniform.
-------- D.h. das merkt er nicht dazu sind 3000 Samples zu wenig.
Wenn ich aber alle 6 6 Folgen durch 6 1 ersetze merkt er es:
-------- Distribution of num2 values:
1: 557 times
2: 479 times
3: 486 times
4: 513 times
5: 532 times
6: 433 times Chi-squared statistic: 19.136000 The distribution does not appear to be uniform.
--------
H
Helmut Schellong
Ja, danke, habe ich gespeichert. Das ist prinzipiell so wie die Test-Suite vom NIST mit 15 Tests. (Chi kommt in der Kryptographie oft vor.) Wenn die Anzahlen der 0-Bits und 1-Bits nicht fast genau gleich sind, brauchen weitere Tests gar nicht erst durchgeführt werden.
Ja, war ein Hastigkeitsfehler von mir.
Ich habe hier nur den Mittelwert genau getestet. Alles Weitere habe ich zunächst heuristisch an der random-Zahlenfolge festgestellt.
Daß alle Zahlen 1..6 vorkommen, sah ich in Sekunden. Man kann testen, ob diese Zahlen untereinander fast die gleiche Häufigkeit haben. Es kann eine gute Mischung geprüft werden - sie liegt offenbar vor. Falsch wären z.B. gleich viele 3 und 4 - Mittelwert 3.5; oder 2 und 5, etc. Etc.
Im kryptographischen Bereich kenne ich z.B. 2^68 Periode. Bei random mit Divisionsrest 2^32.
Ich benutze hier einen sich selbst ändernden Seed. Nach jeweils 4000 Ausgaben wird automatisch ein Seed durchgeführt.
H
Helmut Schellong
[...]
Ich habe bisher nur den Mittelwert genau festgestellt. Alles Weitere habe ich heuristisch anhand der random-Ausgabe festgestellt. Der Algorithmus wurde 2014 von den Kryptologen Rivest+Schuldt entwickelt. Ich kann folglich davon ausgehen, daß der Algorithmus gut ist.
Das leichte Pendeln um den genauen Mittelwert ist fortbestehend, schrieb ich bereits. Jedenfalls bis 500000 repeat. Das kann daran liegen, daß dort ein automatischer Seed(4000) arbeitet, dessen Wert sich zudem jedes Mal ändert.
H
Helmut Schellong
[...]
[...]
Wenn ich die Zahlenfolge heuristisch betrachte, finde ich sie auch Okay. "5 degrees of freedom" finde ich ziemlich großzügig.
Ja, 475 unterscheidet sich kaum von 479. Und 515 ist auch noch im Rahmen. (Bei mehr Samples gäbe aber auch mehr # times.)
Es gibt viel mehr solche Folgen.
433 ist nun doch zu niedrig - Ausreißer. Komplementär ist 557 ebenfalls ein Ausreißer.
R
Rolf Bombach
Helmut Schellong schrieb:
Gut zu erkennen (auch so) ist, dass Nulldurchgänge (oder hier '3.5'-Durchgänge) nur am Anfang häufig sind und dann nach einigen Hundert Durchgängen extrem selten werden. Etwas störend für mich ist der Bereich ca. 600-800, wo die kumulierte Abweichung fast -100 erreicht. Wichtig wäre zu erkennen, dass die kumulierte Abweichung bei hinreichend vielen Würfen beliebig gross werden kann, das 'übersehen' viele Leute, die immer mit dem Gesetz der grossen Zahl ankommen, ohne es verstanden zu haben.
Ich empfehle, das mal bis zu deutlich höheren Anzahlen zu verfolgen. Aber bitte nicht die Tabelle hier posten, danke.
R
Rolf Bombach
Helmut Wabnig schrieb:
[siehe vorhergehendes, 'etwas' längeres Posting]
Wir wissen, dass du ein asozialer Rüpel bist, da musst du dich nicht jedesmal outen.
R
Rolf Bombach
Das mag der eine Punkt sein, der andere, für mich interessantere ist, wie gross die Abweichung absolut wird. Die ist hier (-)50, das ist ein ungewöhnlich tiefer Wert.
Daher meine Bitte an Helmut: Verfolge den Verlauf der absoluten Abweichung und notiere die Maxima/Minima. Die sollten immer grösser werden.
Und ja, diese Abweichung geteilt durch die Anzahl Würfe, das wird immer kleiner.
H
Helmut Schellong
Ich bin dabei, die Voraussetzungen zu schaffen. Nämlich einen aktuellen Compiler, der unter Windows 11 korrekt läuft. Carla sagte auch schon so etwas.
Das Skript kann ich in Minuten ändern, wegen weiterer Ausgaben.
-- Mit freundlichen Grüßen Helmut Schellong snipped-for-privacy@schellong.biz
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
H
Helmut Schellong
formatting link
Da ist eine random.out zu finden.
10000000
Ab etwa 4 Mio. erreicht er dauerhaft 3.500. Bis dahin pendelt er.
-- Mit freundlichen Grüßen Helmut Schellong snipped-for-privacy@schellong.biz
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.