Groups | Search | Server Info | Login | Register
Groups > de.sci.electronics > #353365
| From | Carla Schneider <carla_schn@proton.me> |
|---|---|
| Newsgroups | de.sci.electronics |
| Subject | Re: random Statistik |
| Date | 2024-06-15 13:05 +0200 |
| Organization | Mausgrau |
| Message-ID | <666D7563.3B0069E4@proton.me> (permalink) |
| References | (7 earlier) <v4ctle$1i87t$1@solani.org> <v4fflu$1kahr$1@solani.org> <v4gu3f$1kv5u$1@solani.org> <666C1D31.22DA75C6@proton.me> <v4ih47$1lge3$1@solani.org> |
Helmut Schellong wrote:
>
> Carla Schneider wrote:
> > Helmut Schellong wrote:
>
> > Chatgpt:
> > -------
> > The script appears to be written in a Unix shell scripting language,
> > specifically using syntax and constructs typical of bash or sh.
> > --------
> >
> > Laeuft allerdings bei mir nicht:
> >
> > ------
> > bash: line 4: array: command not found
> > Anzahl Zufallszahl SummeZ Mittelwert Abweichungen
> > bash: line 8: syntax error near unexpected token `from'
> > bash: line 8: `for n from 1 to 1000000 repeat'
> > ------
> > Ich vermute mal das ist fuer deine selbstgeschriebene Spezial-shell.
>
> Selbstverständlich.
> Ich wäre ja ein Vollidiot, würde ich nicht so wählen.
> Nur in dieser Shell ist ein random-Spritz-Algorithmus implementiert.
>
> Mindestens 90% der Möglichkeiten dieser Shell sind in keiner anderen Shell vorhanden.
> Simple Beispiele:
> [ for Name ] [ from a ] [ by i ] [ to b ] repeat
> for 5 a b c - e in .....
>
> > Es ist auch keine gute Idee sowas als shell script zu programmieren...
>
> Es ist schlicht optimal, solch eine kleine Untersuchung per Skript zu implementieren.
>
> > Gluecklicherweise gibts chatgpt um das ganze in C zu uebersetzen:
>
> Ich wollte doch gezielt den kryptographischen Algorithmus Spritz untersuchen.
>
> ChatGPT hat nachfolgend gewiß nicht mein bloßes Skript übersetzt, ohne weitere
> Informationen (und Nacharbeiten).
Eigentlich schon.
Es hatte natuerlich nur die normale rand() funktion fuer die Zufallszahlen verwendet.
Nachdem ich das jetzt weiss hat mir chatgpt das Programm entsprechend abgeaendert,
ich habe das Programm nicht naeher untersucht:
-------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <float.h>
#define N 256
typedef struct {
unsigned char S[N];
unsigned char i, j;
} RC4Spritz;
void swap(unsigned char *a, unsigned char *b) {
unsigned char temp = *a;
*a = *b;
*b = temp;
}
void rc4_spritz_init(RC4Spritz *rc4, const unsigned char *key, size_t key_len) {
int i, j;
for (i = 0; i < N; i++) {
rc4->S[i] = i;
}
for (i = j = 0; i < N; i++) {
j = (j + rc4->S[i] + key[i % key_len]) % N;
swap(&rc4->S[i], &rc4->S[j]);
}
rc4->i = rc4->j = 0;
}
unsigned char rc4_spritz_next(RC4Spritz *rc4) {
rc4->i = (rc4->i + 1) % N;
rc4->j = (rc4->j + rc4->S[rc4->i]) % N;
swap(&rc4->S[rc4->i], &rc4->S[rc4->j]);
return rc4->S[(rc4->S[rc4->i] + rc4->S[rc4->j]) % N];
}
void rc4_spritz_generate(RC4Spritz *rc4, unsigned char *buffer, size_t len) {
for (size_t k = 0; k < len; k++) {
buffer[k] = rc4_spritz_next(rc4);
}
}
int main() {
long double ARITH_FMT = 0.0;
long long r = 0, r0 = 0, z = 0, n = 0, e = 0, s = 0, m = 0, m0 = 0;
long double sa = 0.0, dp = 0.0, dm = 0.0;
int d0 = 0, d = 0, i = 0;
long long Z[7] = {0}; // Array to store counts of dice rolls from 1 to 6
long long count = 1000000;
printf("Range and Precision of long double on this system:\n");
printf("Minimum positive long double: %Le\n", LDBL_MIN);
printf("Maximum positive long double: %Le\n", LDBL_MAX);
printf("Precision (decimal digits): %d\n", LDBL_DIG);
printf("Smallest increment: %Le\n\n", LDBL_EPSILON);
printf("Anzahl Zufallszahl SummeZ Mittelwert Abweichungen\n");
// RC4 Spritz key setup
unsigned char key[] = "mysecretkey";
RC4Spritz rc4;
rc4_spritz_init(&rc4, key, strlen((char *)key));
for (n = 1; n <= count; n++) {
unsigned char rand_byte;
rc4_spritz_generate(&rc4, &rand_byte, 1);
r = (rand_byte % 6) + 1; // Generate random number between 1 and 6
d = r - r0;
r0 = r;
if (d >= 0) {
dp += d;
} else {
dm -= d;
}
s += r;
m = s / (long double)n;
sa += m - 3.5;
Z[r]++;
if (d == 0) {
d0++;
}
printf("%lld %lld %lld %.6Lf %lld\n", n, r, s, m, llround(sa));
}
r = (count - 1) / 6;
printf("%lld %lld %lld %lld %lld %lld Anzahlen von 1 2 3 4 5 6\n",
Z[1], Z[2], Z[3], Z[4], Z[5], Z[6]);
printf("%lld %lld %lld %lld %lld %lld %% Differenzen zum Erwartungswert\n",
Z[1] - r, Z[2] - r, Z[3] - r, Z[4] - r, Z[5] - r, Z[6] - r);
printf("%.6Lf %.6Lf %d Summen der pos. und neg. Differenzen und Gleichheiten Z-Z0\n", dp, dm,
d0);
return 0;
}
--------
Mit auskommentierter Zeile fuer die counts und count=1000000
-----
Range and Precision of long double on this system:
Minimum positive long double: 3.362103e-4932
Maximum positive long double: 1.189731e+4932
Precision (decimal digits): 18
Smallest increment: 1.084202e-19
Anzahl Zufallszahl SummeZ Mittelwert Abweichungen
168603 168016 167869 167776 163774 163962 Anzahlen von 1 2 3 4 5 6
1937 1350 1203 1110 -2892 -2704 % Differenzen zum Erwartungswert
970939.000000 970935.000000 166816 Summen der pos. und neg. Differenzen und Gleichheiten Z-Z0
--------
Die Differenzen zum Erwartungswert sind aber deutlich hoeher als bei bei der rand() funktion
und bei dir, naemlich etwa 1% der Counts.
Mit count=10000000000=10Mrd:
-------
Sat Jun 15 12:05:07 CEST 2024
Range and Precision of long double on this system:
Minimum positive long double: 3.362103e-4932
Maximum positive long double: 1.189731e+4932
Precision (decimal digits): 18
Smallest increment: 1.084202e-19
Anzahl Zufallszahl SummeZ Mittelwert Abweichungen
1679669293 1679685174 1679702172 1679672758 1640608235 1640662368 Anzahlen von 1 2 3 4 5 6
13002627 13018508 13035506 13006092 -26058431 -26004298 % Differenzen zum Erwartungswert
9704336862.000000 9704336860.000000 1666849409 Summen der pos. und neg. Differenzen und
Gleichheiten Z-Z0
Sat Jun 15 12:10:54 CEST 2024
-------
Dauert also kaum laenger als mit der rand() Funktion.
Aber die Differenzen sind viel groesser sie bleiben bei etwa 1% der Anzahlen
muessten aber hier um den Faktor 100 kleiner sein als bei 1Mio counts,
also 0.01% .
Irgendwie taugt dieser Zufallsgenerator nicht, oder da ist ein Fehler in der
Implementierung durch Chatgpt.
> >
> > Wenn man aufs ausdrucken der count Zeilen verzichtet laeuft es sogar richtig schnell:
> >
> >
> > Anzahl Zufallszahl SummeZ Mittelwert Abweichungen
> > 166214 166518 166529 166583 167060 167096 Anzahlen von 1 2 3 4 5 6
> > -452 -148 -137 -83 394 430 % Differenzen zum Erwartungswert
> > 973651.000000 973646.000000 166457 Summen der pos. und neg. Differenzen und Gleichheiten Z-Z0
> >
> >
> > Mit count=1000000000 (100*100 Mio) dauert es 4 Minuten:
> >
> > bash-5.2# date; ./script2 ; date
> > Fri Jun 14 12:19:19 CEST 2024
> > Anzahl Zufallszahl SummeZ Mittelwert Abweichungen
> > 1666727685 1666703808 1666627423 1666644804 1666640939 1666655341 Anzahlen von 1 2 3 4 5 6
> > 61019 37142 -39243 -21862 -25727 -11325 % Differenzen zum Erwartungswert
> > 9722203361.000000 9722203357.000000 1666717345 Summen der pos. und neg. Differenzen und
> > Gleichheiten Z-Z0
> > Fri Jun 14 12:23:34 CEST 2024
> >
> >
> > Man sieht schoen dass die Differenzen wie erwartet etwa 100 mal so gross geworden sind.
> > Wenn man eine Statistik ueber die Differenzen machen will sollte man das ganze aber oefter
> > rechnen, also statt 10Mrd lieber 10000 mal eine Mio.
> >
> >
> > Nochmal das 100fache waeren mit dann 400Minuten auch kein Problem und an einem Tag machbar.
>
> Ich sehe keinen Sinn darin, mehr als 100000 random-Zahlen zu untersuchen.
> Eigentlich reicht eine Generierung von 10000 Zahlen, um die Qualität zu beurteilen.
Je mehr Zahlen man hat umso kleinere Abweichungen kann man finden, sieht man ja
an dem Experiment oben.
> Genau deshalb habe ich _meine_ Shell, nicht jedoch C, als Werkzeug gewählt.
Damit es dich daran hindert mehr Zahlen auszuprobieren ?
>
> Aktuelles Skript:
> --------------------------------------------------------------------------------------
> ARITH_FMT='%.6Lf'
> set r:025 r0:025 z:025 n:020 e:020 s:025 m:025 m0:025
> set sa:025 dp:025 dm:025 d0:025 c61:020 c16:020 c22:020
> s=0 m=0.0 m0=-1.0 sa=0.0 d=00 skip=00 i=0000000000
> array 1 6 Z $i $i $i $i $i $i
>
> echo Anzahl Zufallszahl SummeZ Mittelwert Abweichungen
>
> for n from 1 to 100000 repeat
> do
> let "r= random(6)+1" "d=r-r0" "d>=0"
> run? "let 'dp+=d'" "let 'dm-=d'"
> if let "skip==0"
> then
> if let "r0==6 && r==1"
> then let "++c61, skip=1"
> elif let "r0==1 && r==6"
> then let "++c16, skip=1"
> elif let "r0==2 && r==2"
> then let "++c22, skip=1"
> fi
> else skip=0
> fi
> let "s+=r" "m=s/$n.0" "sa+=m-3.5" "++Z[r]" "d==0" && let "++d0"
> let "r0=r"
> echo "$n $r $s $m $((llround(sa)))"
> done
>
> let "r=($n-1)/6"
> echo "%n$Z1 $Z2 $Z3 $Z4 $Z5 $Z6 " Anzahlen von 1 2 3 4 5 6
> echo "$((Z1-r)) $((Z2-r)) $((Z3-r)) $((Z4-r)) $((Z5-r)) $((Z6-r)) " %
> Differenzen zum Erwartungswert
> echo "$dp $dm $d0 " Summen der pos. und neg. Differenzen und Gleichheiten Z-Z0
> echo "$c61 $c16 $c22 " Anzahlen der Zahlenfolgen 61, 16, 22
> --------------------------------------------------------------------------------------
> 999986 4 3499025 3.499074 -779
> 999987 5 3499030 3.499075 -779
> 999988 6 3499036 3.499078 -779
> 999989 5 3499041 3.499079 -779
> 999990 5 3499046 3.499081 -779
> 999991 3 3499049 3.499080 -779
> 999992 2 3499051 3.499079 -779
> 999993 1 3499052 3.499076 -779
> 999994 3 3499055 3.499076 -779
> 999995 5 3499060 3.499077 -779
> 999996 6 3499066 3.499080 -779
> 999997 2 3499068 3.499078 -779
> 999998 3 3499071 3.499078 -779
> 999999 2 3499073 3.499076 -779
> 1000000 2 3499075 3.499075 -779
>
> 166369 167418 166832 166125 166662 166594 Anzahlen von 1 2 3 4 5 6
> -297 752 166 -541 -4 -72 Differenzen zum Erwartungswert
> 972396 972394 166237 Summen der pos. und neg. Differenzen und Gleichheiten Z-Z0
> 23898 23555 Anzahlen der Zahlenfolgen 61 und 16
>
> 99989 4 350117 3.501555 340
> 99990 3 350120 3.501550 340
> 99991 1 350121 3.501525 340
> 99992 2 350123 3.501510 340
> 99993 3 350126 3.501505 340
> 99994 5 350131 3.501520 340
> 99995 6 350137 3.501545 340
> 99996 2 350139 3.501530 340
> 99997 6 350145 3.501555 340
> 99998 2 350147 3.501540 340
> 99999 6 350153 3.501565 340
> 100000 6 350159 3.501590 340
>
> 16625 16690 16581 16773 16667 16664 Anzahlen von 1 2 3 4 5 6
> -41 24 -85 107 1 -2 Differenzen zum Erwartungswert
> 97303 97297 16614 Summen der pos. und neg. Differenzen und Gleichheiten Z-Z0
> 2409 2408 2350 Anzahlen der Zahlenfolgen 61, 16, 22
> --------------------------------------------------------------------------------------
>
Back to de.sci.electronics | Previous | Next — Previous in thread | Next in thread | Find similar
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-10 11:24 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-10 17:05 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-11 11:48 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-11 13:00 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-11 15:50 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-11 16:26 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-11 17:51 +0200
Re: random Statistik Rolf Bombach <rolfnospambombach@invalid.invalid> - 2024-06-11 14:31 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-11 15:45 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-12 05:04 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-12 08:43 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-12 16:36 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-12 21:41 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-13 21:01 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-14 10:13 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-14 12:36 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-15 00:44 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-15 13:05 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-15 15:10 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-16 11:17 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-16 22:59 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-17 12:10 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-17 15:05 +0200
Re: random Statistik Rolf Bombach <rolfnospambombach@invalid.invalid> - 2024-06-15 20:34 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-15 23:12 +0200
Re: random Statistik Rolf Bombach <rolfnospambombach@invalid.invalid> - 2024-06-17 15:16 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-17 16:40 +0200
Re: random Statistik - Windows PowerShell Helmut Schellong <var@schellong.biz> - 2024-06-18 00:17 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-13 09:43 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-13 12:55 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-13 14:05 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-13 16:11 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-13 16:57 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-13 20:47 +0200
Re: random Statistik Carla Schneider <carla_schn@proton.me> - 2024-06-18 10:59 +0200
Re: random Statistik Helmut Schellong <var@schellong.biz> - 2024-06-18 17:37 +0200
csiph-web