Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #30911 > unrolled thread
| Started by | Adam Klobukowski <adamklobukowski@gmail.com> |
|---|---|
| First post | 2017-11-28 00:48 -0800 |
| Last post | 2017-11-30 22:04 -0800 |
| Articles | 20 on this page of 51 — 10 participants |
Back to article view | Back to pl.comp.programming
Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 00:48 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-28 05:13 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-28 05:17 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 01:20 +0100
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 09:41 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:12 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-29 00:48 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 10:19 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-29 02:23 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 14:01 +0100
Re: Prosty generator pseudolosowy 8bit z limitem Stregor <stregor@wytnij.to.gmail.com> - 2017-11-29 14:28 +0100
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-30 22:01 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-02 02:46 +0100
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-12-04 08:34 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-06 09:58 +0100
Re: Prosty generator pseudolosowy 8bit z limitem Roman Tyczka <noemail@because.no> - 2017-12-06 20:14 +0100
Re: Prosty generator pseudolosowy 8bit z limitem fir <profesor.fir@gmail.com> - 2017-12-06 01:40 -0800
Re: Prosty generator pseudolosowy 8bit z limitem fir <profesor.fir@gmail.com> - 2017-12-06 09:22 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-12-06 20:07 +0100
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-06 21:27 +0100
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-06 21:30 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-12-07 01:09 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-06 18:54 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-06 20:15 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-08 08:53 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-09 07:27 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 14:04 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:38 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:34 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:29 +0100
Re: Prosty generator pseudolosowy 8bit z limitem szykcech@gmail.com - 2017-11-28 05:50 -0800
Re: Prosty generator pseudolosowy 8bit z limitem szykcech@gmail.com - 2017-11-28 06:09 -0800
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 08:39 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-28 20:13 +0100
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 21:59 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "Radoslaw Szwed" <radekszwed@pochta.fm> - 2017-11-29 07:55 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 18:48 +0100
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 20:29 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 20:38 +0100
Re: Prosty generator pseudolosowy 8bit z limitem bartekltg <bartekltg@gmail.com> - 2017-11-29 20:43 -0800
Re: Prosty generator pseudolosowy 8bit z limitem szykcech@gmail.com - 2017-11-28 19:53 -0800
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 22:00 -0800
Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 09:44 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 20:34 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-30 04:57 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-12-01 01:05 +0100
Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-29 00:41 -0800
Re: Prosty generator pseudolosowy 8bit z limitem bartekltg <bartekltg@gmail.com> - 2017-11-29 20:42 -0800
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-30 22:04 -0800
Re: Prosty generator pseudolosowy 8bit z limitem "Radoslaw Szwed" <radekszwed@pochta.fm> - 2017-11-30 07:31 +0100
Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-30 22:04 -0800
Page 2 of 3 — ← Prev page 1 [2] 3 Next page →
| From | slawek <fake@fakeemail.com> |
|---|---|
| Date | 2017-12-06 21:30 +0100 |
| Message-ID | <almarsoft.1125366514039150207@news.v.pl> |
| In reply to | #31024 |
On Wed, 6 Dec 2017 20:07:24 +0100, "AK" <nobody@nowhere.net> wrote: > rand() & 0xFF // ;) Lepiej (rand() >> 4) & 0xff Najniższe bity wywalić.
[toc] | [prev] | [next] | [standalone]
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Date | 2017-12-07 01:09 +0100 |
| Message-ID | <p0a0td$1lis$1@gioia.aioe.org> |
| In reply to | #31030 |
Użytkownik "slawek" <fake@fakeemail.com> napisał: >> rand() & 0xFF // ;) > > Lepiej (rand() >> 4) & 0xff > > Najniższe bity wywalić. To prawda, ale oni chcieli "szybciej", a nie "lepiej" :) PS: Oczywiscie generalnie to byl zart (no nie tak znow w 100%:) AK
[toc] | [prev] | [next] | [standalone]
| From | "M.M." <mmarszik@gmail.com> |
|---|---|
| Date | 2017-12-06 18:54 -0800 |
| Message-ID | <5d065c65-af76-4b5a-8ee2-6df4c7d37640@googlegroups.com> |
| In reply to | #31034 |
On Thursday, December 7, 2017 at 1:10:25 AM UTC+1, AK wrote: > Użytkownik "slawek" <fake@fakeemail.com> napisał: > >> rand() & 0xFF // ;) > > > > Lepiej (rand() >> 4) & 0xff > > > > Najniższe bity wywalić. > > To prawda, ale oni chcieli "szybciej", a nie "lepiej" :) > PS: Oczywiscie generalnie to byl zart (no nie tak znow w 100%:) W Wieczorkowskim jest podanych kilka parametrów dla generatorów Fibonacciego. Sprawdzałem, działają bardzo szybko i przechodzą dużo testów. Zazwyczaj są znacznie lepsze niż generator liniowy, a nawet MT. Jeśli to nie był żart, to napiszcie, czemu nie użyć Fibonacciego? Pozdrawiam Pozdrawiam
[toc] | [prev] | [next] | [standalone]
| From | "M.M." <mmarszik@gmail.com> |
|---|---|
| Date | 2017-12-06 20:15 -0800 |
| Message-ID | <de1df326-e16f-41d7-b28a-fae1c5baf513@googlegroups.com> |
| In reply to | #31034 |
On Thursday, December 7, 2017 at 1:10:25 AM UTC+1, AK wrote:
> Użytkownik "slawek" <fake@fakeemail.com> napisał:
> >> rand() & 0xFF // ;)
> >
> > Lepiej (rand() >> 4) & 0xff
> >
> > Najniższe bity wywalić.
>
> To prawda, ale oni chcieli "szybciej", a nie "lepiej" :)
> PS: Oczywiscie generalnie to byl zart (no nie tak znow w 100%:)
>
> AK
Zwykły liniowy też może nieźle przechodzić diehardera, ale ma
operację modulo na uint64, więc nie działa super szybko:
#include <cstdio>
#include <cstdlib>
#define N (1000)
unsigned int frand() {
static unsigned long long x = 3456;
return x = ( 67867967ull * x + 373587883ull ) % 22801763489ull;
}
int main(int argc, char *argv[]) {
while( true ) {
unsigned char x[N];
for( int i=0 ; i<N ; i++ ) {
x[i] = (unsigned char)( ( frand() >> 12 ) & 0xff );
}
fwrite( x , 1 , N , stdout );
}
return 0;
}
time ./frnd | dieharder -a -m 1 -g 200
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name |rands/second| Seed |
stdin_input_raw| 2.08e+07 |2780121314|
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.46063422| PASSED
diehard_operm5| 0| 1000000| 100|0.31333531| PASSED
diehard_rank_32x32| 0| 40000| 100|0.93698626| PASSED
diehard_rank_6x8| 0| 100000| 100|0.91729484| PASSED
diehard_bitstream| 0| 2097152| 100|0.88623878| PASSED
diehard_opso| 0| 2097152| 100|0.04569037| PASSED
diehard_oqso| 0| 2097152| 100|0.67464303| PASSED
diehard_dna| 0| 2097152| 100|0.11851483| PASSED
diehard_count_1s_str| 0| 256000| 100|0.99351326| PASSED
diehard_count_1s_byt| 0| 256000| 100|0.27087944| PASSED
diehard_parking_lot| 0| 12000| 100|0.48712953| PASSED
diehard_2dsphere| 2| 8000| 100|0.71869890| PASSED
diehard_3dsphere| 3| 4000| 100|0.06056982| PASSED
diehard_squeeze| 0| 100000| 100|0.12027489| PASSED
diehard_sums| 0| 100| 100|0.03918554| PASSED
diehard_runs| 0| 100000| 100|0.79798093| PASSED
diehard_runs| 0| 100000| 100|0.70611138| PASSED
diehard_craps| 0| 200000| 100|0.72556415| PASSED
diehard_craps| 0| 200000| 100|0.91109206| PASSED
marsaglia_tsang_gcd| 0| 10000000| 100|0.10109988| PASSED
marsaglia_tsang_gcd| 0| 10000000| 100|0.39278261| PASSED
sts_monobit| 1| 100000| 100|0.99866272| WEAK
sts_runs| 2| 100000| 100|0.52353357| PASSED
sts_serial| 1| 100000| 100|0.49463645| PASSED
sts_serial| 2| 100000| 100|0.23074460| PASSED
sts_serial| 3| 100000| 100|0.53546328| PASSED
sts_serial| 3| 100000| 100|0.86112117| PASSED
sts_serial| 4| 100000| 100|0.85038482| PASSED
sts_serial| 4| 100000| 100|0.67397315| PASSED
sts_serial| 5| 100000| 100|0.60585098| PASSED
sts_serial| 5| 100000| 100|0.54968851| PASSED
sts_serial| 6| 100000| 100|0.99277070| PASSED
sts_serial| 6| 100000| 100|0.68076764| PASSED
sts_serial| 7| 100000| 100|0.60350923| PASSED
sts_serial| 7| 100000| 100|0.16223947| PASSED
sts_serial| 8| 100000| 100|0.44079302| PASSED
sts_serial| 8| 100000| 100|0.27416319| PASSED
sts_serial| 9| 100000| 100|0.58490231| PASSED
sts_serial| 9| 100000| 100|0.49073425| PASSED
sts_serial| 10| 100000| 100|0.98547876| PASSED
sts_serial| 10| 100000| 100|0.61975871| PASSED
sts_serial| 11| 100000| 100|0.83174032| PASSED
sts_serial| 11| 100000| 100|0.74740837| PASSED
sts_serial| 12| 100000| 100|0.04825508| PASSED
sts_serial| 12| 100000| 100|0.34237994| PASSED
sts_serial| 13| 100000| 100|0.25836505| PASSED
sts_serial| 13| 100000| 100|0.54657267| PASSED
sts_serial| 14| 100000| 100|0.53319336| PASSED
sts_serial| 14| 100000| 100|0.66858312| PASSED
sts_serial| 15| 100000| 100|0.17449009| PASSED
sts_serial| 15| 100000| 100|0.36364894| PASSED
sts_serial| 16| 100000| 100|0.74664519| PASSED
sts_serial| 16| 100000| 100|0.61780527| PASSED
rgb_bitdist| 1| 100000| 100|0.62404389| PASSED
rgb_bitdist| 2| 100000| 100|0.76697955| PASSED
rgb_bitdist| 3| 100000| 100|0.33500938| PASSED
^C
real 8m36.320s
user 11m9.300s
sys 0m13.596s
[toc] | [prev] | [next] | [standalone]
| From | "M.M." <mmarszik@gmail.com> |
|---|---|
| Date | 2017-12-08 08:53 -0800 |
| Message-ID | <2300ddec-34df-45fb-bd86-bf5972683a85@googlegroups.com> |
| In reply to | #31034 |
On Thursday, December 7, 2017 at 1:10:25 AM UTC+1, AK wrote:
> Użytkownik "slawek" <fake@fakeemail.com> napisał:
> >> rand() & 0xFF // ;)
> >
> > Lepiej (rand() >> 4) & 0xff
> >
> > Najniższe bity wywalić.
>
> To prawda, ale oni chcieli "szybciej", a nie "lepiej" :)
> PS: Oczywiscie generalnie to byl zart (no nie tak znow w 100%:)
>
> AK
Generator Fibonacciego też można napisać w 10 minut na
kolanie i, jak na razie, przeszedł kilkanaście początkowych
diehardera nawet na m=30. Generowanie liczb jest ekstremalnie
szybkie, nie zawiera nawet ifa. Niestety nie wiadomo czy dla
innych zarodków też zachowa się tak samo dobrze :/ I drugie
niestety: poniższa implementacja wymaga ponad 16k bajtów ram.
Kod:
class FibRnd {
private:
unsigned int a,b,c;
unsigned int *x;
unsigned int max;
public:
FibRnd(unsigned int seed) {
max = 1<<12;
a = 0;
b = 16;
c = max-1;
x = new unsigned int[max];
for( unsigned int i=0 ; i<max * 4 ; i++ ) {
x[i%max] <<= 4;
x[i%max] ^= seed = ((seed * 359ull + 3733ull) % 1057767ull);
}
}
~FibRnd() {
delete[] x;
}
unsigned int operator ()() {
a = (a+1)&(max-1);
b = (b+1)&(max-1);
c = (c+1)&(max-1);
return x[c] = x[a] + x[b];
}
};
int main( int argc, char *argv[] ) {
FibRnd rnd((unsigned int)time(NULL));
while( true ) {
unsigned char x[N];
for( int i=0 ; i<N ; i++ )
x[i] = (unsigned char)rnd();
fwrite( x , 1 , N , stdout );
}
return 0;
}
Test:
time ./frnd | dieharder -a -m 30 -g 200
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name |rands/second| Seed |
stdin_input_raw| 3.00e+07 |2482448351|
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 3000|0.29234458| PASSED
diehard_operm5| 0| 1000000| 3000|0.51398474| PASSED
diehard_rank_32x32| 0| 40000| 3000|0.36767415| PASSED
diehard_rank_6x8| 0| 100000| 3000|0.69227346| PASSED
diehard_bitstream| 0| 2097152| 3000|0.30960016| PASSED
diehard_opso| 0| 2097152| 3000|0.85888419| PASSED
diehard_oqso| 0| 2097152| 3000|0.67207083| PASSED
diehard_dna| 0| 2097152| 3000|0.00012554| WEAK
diehard_count_1s_str| 0| 256000| 3000|0.51597335| PASSED
diehard_count_1s_byt| 0| 256000| 3000|0.26197695| PASSED
diehard_parking_lot| 0| 12000| 3000|0.17469806| PASSED
diehard_2dsphere| 2| 8000| 3000|0.54418532| PASSED
diehard_3dsphere| 3| 4000| 3000|0.87789531| PASSED
diehard_squeeze| 0| 100000| 3000|0.26815462| PASSED
diehard_sums| 0| 100| 3000|0.00000000| FAILED
diehard_runs| 0| 100000| 3000|0.01445376| PASSED
diehard_runs| 0| 100000| 3000|0.00537657| PASSED
diehard_craps| 0| 200000| 3000|0.93729302| PASSED
diehard_craps| 0| 200000| 3000|0.34274658| PASSED
Pozdrawiam
P.S.
Nie patrzcie na diehard_sums, bo ten test zawiera błędy.
[toc] | [prev] | [next] | [standalone]
| From | "M.M." <mmarszik@gmail.com> |
|---|---|
| Date | 2017-12-09 07:27 -0800 |
| Message-ID | <75559562-1fa2-4af4-87e0-4d4284bb50d9@googlegroups.com> |
| In reply to | #31040 |
On Friday, December 8, 2017 at 5:53:22 PM UTC+1, M.M. wrote:
> On Thursday, December 7, 2017 at 1:10:25 AM UTC+1, AK wrote:
> > Użytkownik "slawek" <fake@fakeemail.com> napisał:
> > >> rand() & 0xFF // ;)
> > >
> > > Lepiej (rand() >> 4) & 0xff
> > >
> > > Najniższe bity wywalić.
> >
> > To prawda, ale oni chcieli "szybciej", a nie "lepiej" :)
> > PS: Oczywiscie generalnie to byl zart (no nie tak znow w 100%:)
> >
> > AK
>
> Generator Fibonacciego też można napisać w 10 minut na
> kolanie i, jak na razie, przeszedł kilkanaście początkowych
> diehardera nawet na m=30. Generowanie liczb jest ekstremalnie
> szybkie, nie zawiera nawet ifa. Niestety nie wiadomo czy dla
> innych zarodków też zachowa się tak samo dobrze :/ I drugie
> niestety: poniższa implementacja wymaga ponad 16k bajtów ram.
>
> Kod:
> class FibRnd {
> private:
> unsigned int a,b,c;
> unsigned int *x;
> unsigned int max;
>
> public:
> FibRnd(unsigned int seed) {
> max = 1<<12;
> a = 0;
> b = 16;
> c = max-1;
> x = new unsigned int[max];
> for( unsigned int i=0 ; i<max * 4 ; i++ ) {
> x[i%max] <<= 4;
> x[i%max] ^= seed = ((seed * 359ull + 3733ull) % 1057767ull);
> }
> }
> ~FibRnd() {
> delete[] x;
> }
> unsigned int operator ()() {
> a = (a+1)&(max-1);
> b = (b+1)&(max-1);
> c = (c+1)&(max-1);
> return x[c] = x[a] + x[b];
> }
>
> };
>
> int main( int argc, char *argv[] ) {
> FibRnd rnd((unsigned int)time(NULL));
> while( true ) {
> unsigned char x[N];
> for( int i=0 ; i<N ; i++ )
> x[i] = (unsigned char)rnd();
> fwrite( x , 1 , N , stdout );
> }
> return 0;
> }
Całego diehardera przeszedł na m=30. Nie wiadomo czy dla innych zarodków też
przejdzie, ale jak generator nie musi być super równomierny, a ma być
bardzo szybki, to chyba nie ma nic lepszego.
Generator zwraca tylko 8 najmłodszych bitów. Ciekawe czy działałby lepiej,
gdyby zwracał 8 innych bitów niż najstarsze, bo na wydajność to praktycznie
by nie wpłynęło. Generator może też zwracać więcej bitów, np. 16 bitów, lub 32 bity, a jakby go zaimplementować na typie uint64 lub uint128, to mógłby
zwracać 64 lub 128 bitów. Przyspieszyłoby go to jeszcze do 16 razy. Jak
myślicie, jakość generowanych liczb by spadła?
Wyniki testu dla 8 najmłodszych bitów:
time ./frnd | dieharder -a -m 30 -g 200
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name |rands/second| Seed |
stdin_input_raw| 3.00e+07 |2482448351|
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 3000|0.29234458| PASSED
diehard_operm5| 0| 1000000| 3000|0.51398474| PASSED
diehard_rank_32x32| 0| 40000| 3000|0.36767415| PASSED
diehard_rank_6x8| 0| 100000| 3000|0.69227346| PASSED
diehard_bitstream| 0| 2097152| 3000|0.30960016| PASSED
diehard_opso| 0| 2097152| 3000|0.85888419| PASSED
diehard_oqso| 0| 2097152| 3000|0.67207083| PASSED
diehard_dna| 0| 2097152| 3000|0.00012554| WEAK
diehard_count_1s_str| 0| 256000| 3000|0.51597335| PASSED
diehard_count_1s_byt| 0| 256000| 3000|0.26197695| PASSED
diehard_parking_lot| 0| 12000| 3000|0.17469806| PASSED
diehard_2dsphere| 2| 8000| 3000|0.54418532| PASSED
diehard_3dsphere| 3| 4000| 3000|0.87789531| PASSED
diehard_squeeze| 0| 100000| 3000|0.26815462| PASSED
diehard_sums| 0| 100| 3000|0.00000000| FAILED
diehard_runs| 0| 100000| 3000|0.01445376| PASSED
diehard_runs| 0| 100000| 3000|0.00537657| PASSED
diehard_craps| 0| 200000| 3000|0.93729302| PASSED
diehard_craps| 0| 200000| 3000|0.34274658| PASSED
marsaglia_tsang_gcd| 0| 10000000| 3000|0.83716130| PASSED
marsaglia_tsang_gcd| 0| 10000000| 3000|0.05530917| PASSED
sts_monobit| 1| 100000| 3000|0.85138074| PASSED
sts_runs| 2| 100000| 3000|0.44074715| PASSED
sts_serial| 1| 100000| 3000|0.21861505| PASSED
sts_serial| 2| 100000| 3000|0.28454007| PASSED
sts_serial| 3| 100000| 3000|0.61438900| PASSED
sts_serial| 3| 100000| 3000|0.22112971| PASSED
sts_serial| 4| 100000| 3000|0.95517930| PASSED
sts_serial| 4| 100000| 3000|0.16562539| PASSED
sts_serial| 5| 100000| 3000|0.28466376| PASSED
sts_serial| 5| 100000| 3000|0.10776582| PASSED
sts_serial| 6| 100000| 3000|0.45920174| PASSED
sts_serial| 6| 100000| 3000|0.20303651| PASSED
sts_serial| 7| 100000| 3000|0.49722161| PASSED
sts_serial| 7| 100000| 3000|0.80685114| PASSED
sts_serial| 8| 100000| 3000|0.41749281| PASSED
sts_serial| 8| 100000| 3000|0.94116829| PASSED
sts_serial| 9| 100000| 3000|0.53222747| PASSED
sts_serial| 9| 100000| 3000|0.58938752| PASSED
sts_serial| 10| 100000| 3000|0.26245753| PASSED
sts_serial| 10| 100000| 3000|0.44889624| PASSED
sts_serial| 11| 100000| 3000|0.02441041| PASSED
sts_serial| 11| 100000| 3000|0.00181544| WEAK
sts_serial| 12| 100000| 3000|0.04469190| PASSED
sts_serial| 12| 100000| 3000|0.15885960| PASSED
sts_serial| 13| 100000| 3000|0.02979468| PASSED
sts_serial| 13| 100000| 3000|0.77864508| PASSED
sts_serial| 14| 100000| 3000|0.00025286| WEAK
sts_serial| 14| 100000| 3000|0.03756306| PASSED
sts_serial| 15| 100000| 3000|0.01495578| PASSED
sts_serial| 15| 100000| 3000|0.25646264| PASSED
sts_serial| 16| 100000| 3000|0.10219212| PASSED
sts_serial| 16| 100000| 3000|0.49916583| PASSED
rgb_bitdist| 1| 100000| 3000|0.24353012| PASSED
rgb_bitdist| 2| 100000| 3000|0.33193645| PASSED
rgb_bitdist| 3| 100000| 3000|0.77606973| PASSED
rgb_bitdist| 4| 100000| 3000|0.48072339| PASSED
rgb_bitdist| 5| 100000| 3000|0.02841032| PASSED
rgb_bitdist| 6| 100000| 3000|0.72828838| PASSED
rgb_bitdist| 7| 100000| 3000|0.06921169| PASSED
rgb_bitdist| 8| 100000| 3000|0.41825331| PASSED
rgb_bitdist| 9| 100000| 3000|0.91108880| PASSED
rgb_bitdist| 10| 100000| 3000|0.43222942| PASSED
rgb_bitdist| 11| 100000| 3000|0.61747840| PASSED
rgb_bitdist| 12| 100000| 3000|0.30358537| PASSED
rgb_minimum_distance| 2| 10000| 30000|0.04817726| PASSED
rgb_minimum_distance| 3| 10000| 30000|0.83114815| PASSED
rgb_minimum_distance| 4| 10000| 30000|0.00560345| PASSED
rgb_minimum_distance| 5| 10000| 30000|0.00668000| PASSED
rgb_permutations| 2| 100000| 3000|0.24834843| PASSED
rgb_permutations| 3| 100000| 3000|0.07901995| PASSED
rgb_permutations| 4| 100000| 3000|0.86363673| PASSED
rgb_permutations| 5| 100000| 3000|0.53472342| PASSED
rgb_lagged_sum| 0| 1000000| 3000|0.88718714| PASSED
rgb_lagged_sum| 1| 1000000| 3000|0.26184722| PASSED
rgb_lagged_sum| 2| 1000000| 3000|0.96379709| PASSED
rgb_lagged_sum| 3| 1000000| 3000|0.42731884| PASSED
rgb_lagged_sum| 4| 1000000| 3000|0.97153879| PASSED
rgb_lagged_sum| 5| 1000000| 3000|0.44772137| PASSED
rgb_lagged_sum| 6| 1000000| 3000|0.98129048| PASSED
rgb_lagged_sum| 7| 1000000| 3000|0.14721559| PASSED
rgb_lagged_sum| 8| 1000000| 3000|0.56080283| PASSED
rgb_lagged_sum| 9| 1000000| 3000|0.10075053| PASSED
rgb_lagged_sum| 10| 1000000| 3000|0.52807343| PASSED
rgb_lagged_sum| 11| 1000000| 3000|0.16251504| PASSED
rgb_lagged_sum| 12| 1000000| 3000|0.06012319| PASSED
rgb_lagged_sum| 13| 1000000| 3000|0.02819854| PASSED
rgb_lagged_sum| 14| 1000000| 3000|0.56292316| PASSED
rgb_lagged_sum| 15| 1000000| 3000|0.03627918| PASSED
rgb_lagged_sum| 16| 1000000| 3000|0.31141215| PASSED
rgb_lagged_sum| 17| 1000000| 3000|0.23430245| PASSED
rgb_lagged_sum| 18| 1000000| 3000|0.96322096| PASSED
rgb_lagged_sum| 19| 1000000| 3000|0.05275294| PASSED
rgb_lagged_sum| 20| 1000000| 3000|0.16858733| PASSED
rgb_lagged_sum| 21| 1000000| 3000|0.27858252| PASSED
rgb_lagged_sum| 22| 1000000| 3000|0.86056685| PASSED
rgb_lagged_sum| 23| 1000000| 3000|0.49540101| PASSED
rgb_lagged_sum| 24| 1000000| 3000|0.96278283| PASSED
rgb_lagged_sum| 25| 1000000| 3000|0.85687248| PASSED
rgb_lagged_sum| 26| 1000000| 3000|0.52521927| PASSED
rgb_lagged_sum| 27| 1000000| 3000|0.47528244| PASSED
rgb_lagged_sum| 28| 1000000| 3000|0.68680905| PASSED
rgb_lagged_sum| 29| 1000000| 3000|0.95196801| PASSED
rgb_lagged_sum| 30| 1000000| 3000|0.35409145| PASSED
rgb_lagged_sum| 31| 1000000| 3000|0.79745235| PASSED
rgb_lagged_sum| 32| 1000000| 3000|0.93842994| PASSED
rgb_kstest_test| 0| 10000| 30000|0.00167822| WEAK
dab_bytedistrib| 0| 51200000| 30|0.80854497| PASSED
dab_dct| 256| 50000| 30|0.86426890| PASSED
Preparing to run test 207. ntuple = 0
dab_filltree| 32| 15000000| 30|0.66975905| PASSED
dab_filltree| 32| 15000000| 30|0.56236231| PASSED
Preparing to run test 208. ntuple = 0
dab_filltree2| 0| 5000000| 30|0.59454036| PASSED
dab_filltree2| 1| 5000000| 30|0.75484914| PASSED
Preparing to run test 209. ntuple = 0
dab_monobit2| 12| 65000000| 30|0.23905375| PASSED
real 1437m24.217s
user 1948m33.944s
sys 88m11.892s
[toc] | [prev] | [next] | [standalone]
| From | slawek <fake@fakeemail.com> |
|---|---|
| Date | 2017-11-29 14:04 +0100 |
| Message-ID | <almarsoft.876885087562806864@news.v.pl> |
| In reply to | #30947 |
On Wed, 29 Nov 2017 02:23:29 -0800 (PST), "M.M." <mmarszik@gmail.com> wrote: > To już totalnie odlecieliśmy, moim zdaniem daje liczbę losow= > ą, ale > rozkład jest baaaardzo nierównomierny. Twoje zdanie, twoja sprawa. Ale... są konkretne wyniki, ludzie napisali i opublikowali.
[toc] | [prev] | [next] | [standalone]
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Date | 2017-11-29 19:38 +0100 |
| Message-ID | <ovmus5$1p8f$1@gioia.aioe.org> |
| In reply to | #30947 |
Użytkownik "M.M." <mmarszik@gmail.com> napisał: > Ale co czytałem i co mi się wydaje? Zielinskiego (bardziej teoria) i (tak jak Slawek b.dobrze radzil) Numerical Recipies (od teorii do czystej i uzytecznej praktyki). Czytales ? AK
[toc] | [prev] | [next] | [standalone]
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Date | 2017-11-29 19:34 +0100 |
| Message-ID | <ovmuk9$1oq1$1@gioia.aioe.org> |
| In reply to | #30946 |
No brawo! :) Nic dodac nic ujac (zwlaszcza tekturka:)) AK Użytkownik "slawek" <fake@fakeemail.com> napisał w wiadomości news:almarsoft.8214239723429596713@news.v.pl... > On Wed, 29 Nov 2017 00:48:54 -0800 (PST), "M.M." <mmarszik@gmail.com> wrote: >> liczb losowych, nie znajdziesz w tej książeczce specjalistycznego= >> , z >> podniesioną wydajnością np. kosztem jakości albo dzi�= >> �ki implementacji wykorzystującej specyficzne cechy nowych procesorów. > > > Złe nastawienie. > Czytałeś? Czy tylko tak ci się wydaje? Jak nie czytałeś to przeczytaj - głupszy od tego nie > będziesz. > > Przeczytaj rozdział o generatorach w Numerical Recipes, obejrzyj sobie jak jest napisany generator > w jakiejś bibliotece Open Source, np. GSL czy Scipy, ew. CERNLIB. Dogłębnie poznaj czym jest > "Mersenne Twister". > > Ale przede wszystkim określ czym dla ciebie są liczby losowe. Poszukaj pakietu "Die hard" do > testowania liczb losowych. Wymyśl swój generator. Puść przez testy. Spróbuj uzasadnić > matematycznie że twój generator to akurat to co ci potrzebne. > Jeżeli twój hardware na to pozwala to dolutuj hardwareowy generator. Uwaga: odczyt z wiszącego > pinu NIE daje liczby losowej. > > Co do asemblera: zwykle program w C jest równie dobry jak asembler. Chyba że nie jest. Ale aby tak > było musisz znać asembler w stopniu przy którym nie ma znaczenia czy w asemblerze napiszesz 20 > linijek czy 100. > > I najważniejsze: napisz sobie na tekturce odpowiedź na proste pytanie - DLACZEGO STANDARDOWY > GENERATOR LICZB LOSOWYCH JEST ABSOLUTNIE NIE DO PRZYJĘCIA?
[toc] | [prev] | [next] | [standalone]
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Date | 2017-11-29 19:29 +0100 |
| Message-ID | <ovmuas$1o6c$1@gioia.aioe.org> |
| In reply to | #30945 |
Użytkownik "M.M." <mmarszik@gmail.com> napisał: > Użytkownik "M.M." <mmarszik@gmail.com> napisał: > >> A po cholere jakies sztuczki? > Bo chciałeś szybko a OGÓLNY algorytm modulo jest wolny. Algorytm dla > konkretnej wartości (np. modulo 45) czasami jest dużo szybszy - w sumie > myślałem, że to jest oczywiste dla Ciebie. Czasami czasami... Sprawdzales czy to ma _jakiekolwiek_ znaczenie ? >> Majac generator o rozkladzie jednostajnym (czyli <0, 1) ) przez >> proste skalowanie otrzymuje >> sie generator w potrzebnym przedziale. >Obawiam się, że generator zaimplementowany na liczbach zmiennoprzecinkowych > nie będzie szybki, a tu jeszcze jedno mnożenie na skalowanie... Przeciez to jest pokaznie ogolnej zasady. Nawet w standardowym C jest rand() dajacy integer. O specjalizowanych bibliotekach/algorytmach nawet nie wspomne (MT, SFMT). >> Generalnie na podstawie generatora jednostajnego droga >> obliczania odwrotnej dystrubuanty >> mozna otrzymac generator o innym rockladzie niz jednostajny. > To wszystko prawda, ale do czego pijesz? Do tego zeby _wpierw_ poznac choc "nieco" teorii a nie rzucac sie niepotrzebnie na napisanie najszybszego na swiecie generatora Moge sie zalozyc o wiele, ze ta wypasna "szybkosc" na cholere bedzie interlokutoprowi potrzebna. PS: Co do wolnego % nawt w fp to mozna bylo byc pewnym w "moich czasach" (brak/slaby/osobny komprocesor). Dzis to chyba wyglada zupelnie inaczej :) PS1: Od lat piszę na usenecie: Po czym poznac nieopierzonego programistę C? Po tym, ze zanim chocby jedna linijke napisze juz "optymalizuje"... AK
[toc] | [prev] | [next] | [standalone]
| From | szykcech@gmail.com |
|---|---|
| Date | 2017-11-28 05:50 -0800 |
| Message-ID | <c9ac540a-c37a-43e9-829c-4722d5f85038@googlegroups.com> |
| In reply to | #30911 |
W dniu wtorek, 28 listopada 2017 09:48:28 UTC+1 użytkownik Adam Klobukowski napisał:
> Poszukuję prostego (szybkiego) generatora pseudolosowego liczb 8bitowych z górnym limitem, tj. jak bym chciał sobie wylosować liczbę z zakresu 0-44. Możecie coś polecić?
Możecie! A czy Wy czytacie jedyną gazetę programistyczną w Polsze?!?
Rozwiązanie jest na stronie 21 nr 9/2017:
#include <random>
#include <iostream>
[...]
std::random_device device;
std::mt19937 egine{device()};
std::uniform_int_distribution<> dist(0, 44);
std::cout << dist(engine) << '\n';
Jest to C++11 i gwarantuje rozkład normalny otrzymywanych liczb...
[toc] | [prev] | [next] | [standalone]
| From | szykcech@gmail.com |
|---|---|
| Date | 2017-11-28 06:09 -0800 |
| Message-ID | <47ef8d38-c101-411a-b212-e666415550f2@googlegroups.com> |
| In reply to | #30915 |
> gwarantuje rozkład normalny otrzymywanych liczb... Raczej rozkład liniowy...
[toc] | [prev] | [next] | [standalone]
| From | Adam Klobukowski <adamklobukowski@gmail.com> |
|---|---|
| Date | 2017-11-28 08:39 -0800 |
| Message-ID | <0c7a5465-f216-436c-985c-a033983709fe@googlegroups.com> |
| In reply to | #30915 |
W dniu wtorek, 28 listopada 2017 14:50:58 UTC+1 użytkownik szyk...@gmail.com napisał:
> W dniu wtorek, 28 listopada 2017 09:48:28 UTC+1 użytkownik Adam Klobukowski napisał:
> > Poszukuję prostego (szybkiego) generatora pseudolosowego liczb 8bitowych z górnym limitem, tj. jak bym chciał sobie wylosować liczbę z zakresu 0-44. Możecie coś polecić?
>
> Możecie! A czy Wy czytacie jedyną gazetę programistyczną w Polsze?!?
> Rozwiązanie jest na stronie 21 nr 9/2017:
>
> #include <random>
> #include <iostream>
> [...]
>
> std::random_device device;
> std::mt19937 egine{device()};
> std::uniform_int_distribution<> dist(0, 44);
>
> std::cout << dist(engine) << '\n';
>
> Jest to C++11 i gwarantuje rozkład normalny otrzymywanych liczb...
Dzięki, ale ja nie chcę C, C++, ani C++11.
Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko przykladowo i podczas generacji kolejnych bedzie się zmieniał. Musi to być w miarę proste i szybkie (implementacja bedzie w asemblerze).
AdamK
[toc] | [prev] | [next] | [standalone]
| From | slawek <fake@fakeemail.com> |
|---|---|
| Date | 2017-11-28 20:13 +0100 |
| Message-ID | <almarsoft.3458262175710083257@news.v.pl> |
| In reply to | #30926 |
On Tue, 28 Nov 2017 08:39:13 -0800 (PST), Adam Klobukowski <adamklobukowski@gmail.com> wrote: > Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko przykladowo= > i podczas generacji kolejnych bedzie się zmieniał. Musi to by�= > � w miarę proste i szybkie (implementacja bedzie w asemblerze). Primo, dlaczego w Asemblerze? Secundo, tego rodzaju kawałki ogólnie są proste, nie ma różnicy czy będzie trochę więcej jakichś add czy mul
[toc] | [prev] | [next] | [standalone]
| From | Adam Klobukowski <adamklobukowski@gmail.com> |
|---|---|
| Date | 2017-11-28 21:59 -0800 |
| Message-ID | <b7e9c7d1-798a-4a0b-8167-a214ebcce75d@googlegroups.com> |
| In reply to | #30928 |
W dniu wtorek, 28 listopada 2017 20:13:36 UTC+1 użytkownik slawek napisał: > On Tue, 28 Nov 2017 08:39:13 -0800 (PST), Adam Klobukowski > <adamklobukowski@gmail.com> wrote: > > Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko > przykladowo= > > i podczas generacji kolejnych bedzie się zmieniał. Musi to by�= > > � w miarę proste i szybkie (implementacja bedzie w asemblerze). > > > Primo, dlaczego w Asemblerze? Secundo, tego rodzaju kawałki ogólnie > są proste, nie ma różnicy czy będzie trochę więcej jakichś add czy > mul Takie widzimisie. AdamK
[toc] | [prev] | [next] | [standalone]
| From | "Radoslaw Szwed" <radekszwed@pochta.fm> |
|---|---|
| Date | 2017-11-29 07:55 +0100 |
| Message-ID | <ovllm1$1g4h$1@gioia.aioe.org> |
| In reply to | #30936 |
Użytkownik "Adam Klobukowski" <adamklobukowski@gmail.com> napisał w wiadomości news:b7e9c7d1-798a-4a0b-8167-a214ebcce75d@googlegroups.com... > > > Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko > > przykladowo= > > > i podczas generacji kolejnych bedzie się zmieniał. Musi to by�= > > > � w miarę proste i szybkie (implementacja bedzie w asemblerze). > > > > > > Primo, dlaczego w Asemblerze? Secundo, tego rodzaju kawałki ogólnie > > są proste, nie ma różnicy czy będzie trochę więcej jakichś add czy > > mul > > Takie widzimisie. Poniżej generator pseudolosowy oparty na algorytmie Parka-Millera Gdyby procedura była za wolna użyj koprocesora. proc Losowe ; Generator pseudolosowy Park-Miller [0..eax-1] ; Wejście :eax ; Wyjście :eax mov ebx, eax mov eax, [ziarno] xor edx, edx mov ecx, 127773 div ecx mov ecx, eax mov eax, 16807 mul edx mov edx, ecx mov ecx, eax mov eax, 2836 mul edx sub ecx, eax xor edx, edx mov eax, ecx mov [ziarno], ecx div ebx mov eax, edx ret endp ziarno dd 2037280626
[toc] | [prev] | [next] | [standalone]
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Date | 2017-11-29 18:48 +0100 |
| Message-ID | <ovmrum$1je2$1@gioia.aioe.org> |
| In reply to | #30936 |
Użytkownik "Adam Klobukowski" <adamklobukowski@gmail.com> napisał: > Takie widzimisie. Troche glupie (no chyba, ze w celach poznawczych). Przynajmniej teoretycznie standardowy generator z C powinien byc bardziej losowy i "sprzetowy" niz pisany samodzielnie chocby i w ASM^2 AK
[toc] | [prev] | [next] | [standalone]
| From | slawek <fake@fakeemail.com> |
|---|---|
| Date | 2017-11-29 20:29 +0100 |
| Message-ID | <almarsoft.200007831194143833@news.v.pl> |
| In reply to | #30955 |
On Wed, 29 Nov 2017 18:48:54 +0100, "AK" <nobody@nowhere.net> wrote: > Przynajmniej teoretycznie standardowy generator z C powinien byc > bardziej losowy i "sprzetowy" niz pisany samodzielnie chocby i w ASM^2 Ciekawe jest zrobienie /złego/ generatora. Tzn. takiego który daje trudne, ale możliwe, do przewidzenia liczby. To tak jak z programem szachowym: jak będzie za dobrze grał, to nie będzie po co z nim grać.
[toc] | [prev] | [next] | [standalone]
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Date | 2017-11-29 20:38 +0100 |
| Message-ID | <ovn2bt$4oe$1@node1.news.atman.pl> |
| In reply to | #30966 |
Użytkownik "slawek" <fake@fakeemail.com> napisał: > Ciekawe jest zrobienie /złego/ generatora. Tzn. takiego który daje trudne, ale możliwe, do > przewidzenia liczby. Dobrze wiesz ze zdecydowana wiekszosc "domorośle" robionych generatorow "losowych" ma ta ceche :) Najgorsze jest, ze bardzo czesto zdarzalo sie, ze te z bibliotek standardowych kompilatorow tez... :( AK
[toc] | [prev] | [next] | [standalone]
| From | bartekltg <bartekltg@gmail.com> |
|---|---|
| Date | 2017-11-29 20:43 -0800 |
| Message-ID | <1caa2ca3-5e23-4d06-935e-65942425784a@googlegroups.com> |
| In reply to | #30968 |
On Wednesday, November 29, 2017 at 8:38:38 PM UTC+1, AK wrote: > Użytkownik "slawek" <fake@fakeemail.com> napisał: > > > Ciekawe jest zrobienie /złego/ generatora. Tzn. takiego który daje trudne, ale możliwe, do > > przewidzenia liczby. > > Dobrze wiesz ze zdecydowana wiekszosc "domorośle" robionych generatorow "losowych" ma ta ceche :) > Najgorsze jest, ze bardzo czesto zdarzalo sie, ze te z bibliotek standardowych kompilatorow tez... > :( RANDU ;-) pzdr bartekltg
[toc] | [prev] | [next] | [standalone]
Page 2 of 3 — ← Prev page 1 [2] 3 Next page →
Back to top | Article view | pl.comp.programming
csiph-web