Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.sci.electronics > #353381

Re: random Statistik

From Helmut Schellong <var@schellong.biz>
Newsgroups de.sci.electronics
Subject Re: random Statistik
Date 2024-06-15 15:10 +0200
Message-ID <v4k3ru$1me5m$1@solani.org> (permalink)
References (8 earlier) <v4fflu$1kahr$1@solani.org> <v4gu3f$1kv5u$1@solani.org> <666C1D31.22DA75C6@proton.me> <v4ih47$1lge3$1@solani.org> <666D7563.3B0069E4@proton.me>

Show all headers | View raw


Carla Schneider wrote:
> 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.

Man kennt die Implementation des hiesigen 'Spritz' halt nicht.

> 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.

Ich schätze, der Generator taugt nicht.
-------------------------------------------------------------
                  seed.pid= getpid();
                  seed.tim= time(NULL);
                  if (b!=3)  i-=w;
                  w= wv[(ulong)seed.tim%sizeof(wv)];
                  for (a=0;  a<256;  ++a)  {
                     i= i+w;
                     j= k+s[j+s[i]&255];
                     k= i+k+s[j] + ((byte*)&seed)[a];
                     t= s[i], s[i]=s[j], s[j]=t;
                     z= s[j+s[i+s[z+k&255]&255]&255];
                  }
                  for (j=i,a=0;  a<1024;  ++a)  {
                     i= i+w;
                     j= k+s[j+s[i]&255];
                     k= i+k+s[j];
                     t= s[i], s[i]=s[j], s[j]=t;
                     z= s[j+s[i+s[z+k&255]&255]&255];
                  }
                  cnt=1600000; f=b; continue;
-------------------------------------------------------------
Ich verwende jedenfalls den original 'Spritz'.
Die Variablen k, w, wv gibt es im RC4 nicht.
Die Änderung gegenüber RC4 ist folglich groß.

>>>
>>> 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.

Die Abweichungen verschwinden jedoch nicht - jedenfalls nicht mit 6 Nachkommastellen.
Und sie haben stets den gleichen Charakter im Verlauf.
Folglich sind (viel) mehr random-Zahlen irrelevant.

Ich schrieb bereits in [08.06.2024, 15:32] vom Pendeln um den Mittelwert.

>> Genau deshalb habe ich _meine_ Shell, nicht jedoch C, als Werkzeug gewählt.
> 
> 
> Damit es dich daran hindert mehr Zahlen auszuprobieren ?

Zu Anfang hatte ich 10 Mio. Zahlen innerhalb von etwa 15 s fertig.
Das war voll auskömmlich schnell.
Nachdem das Skript stark erweitert wurde, sind 10 Mio. unbequem geworden.
Aber 1 Mio. ist immer noch /locker/.
1 Mio. lasse ich aber ohnehin nur noch selten laufen.

Laß doch mal das aktuelle Skript in C übersetzen.
Wegen der neuen Zahlenfolgen.

>>
>> 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
>> --------------------------------------------------------------------------------------
>>




-- 
Mit freundlichen Grüßen
Helmut Schellong   var@schellong.biz
http://www.schellong.de/c.htm  http://www.schellong.de/c2x.htm  http://www.schellong.de/c_padding_bits.htm
http://www.schellong.de/htm/bishmnk.htm  http://www.schellong.de/htm/rpar.bish.html  http://www.schellong.de/htm/sieger.bish.html
http://www.schellong.de/htm/audio_proj.htm  http://www.schellong.de/htm/audio_unsinn.htm  http://www.schellong.de/htm/tuner.htm
http://www.schellong.de/htm/string.htm  http://www.schellong.de/htm/string.c.html  http://www.schellong.de/htm/deutsche_bahn.htm
http://www.schellong.de/htm/schaltungen.htm  http://www.schellong.de/htm/math87.htm  http://www.schellong.de/htm/dragon.c.html

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