Groups | Search | Server Info | Login | Register


Groups > de.sci.electronics > #353365

Re: random Statistik

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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