github.com/xaionaro-go/rand@v0.0.0-20191005105903-aba1befc54a5/mathrand/README.md (about)

     1  [![GoDoc](https://godoc.org/github.com/xaionaro-go/rand/mathrand?status.svg)](https://godoc.org/github.com/xaionaro-go/rand/mathrand)
     2  
     3  A collection of popular fast PRNGs (non crypto). This implementations may be used as
     4  analog of [`math/rand`](https://golang.org/pkg/math/rand/).
     5  
     6  [Diehard tests](https://en.wikipedia.org/wiki/Diehard_tests) result:
     7  
     8  |func|passed|weak|failed|score|
     9  |----|------|----|------|-----|
    10  |Uint32AddIfShiftXOR| |1|113|[0.5](./docs/dieharder-results/prngSample-Uint32AddIfShiftXOR.bin.txt)|
    11  |Uint32AddIfShiftXORWithReseed|9|4|101|[11](./docs/dieharder-results/prngSample-Uint32AddIfShiftXORWithReseed.bin.txt)|
    12  |Uint32AddRotate|1|1|112|[1.5](./docs/dieharder-results/prngSample-Uint32AddRotate.bin.txt)|
    13  |Uint32AddRotateMultiply|9|1|104|[9.5](./docs/dieharder-results/prngSample-Uint32AddRotateMultiply.bin.txt)|
    14  |Uint32AddRotateMultiplyWithReseed|24|17|73|[32.5](./docs/dieharder-results/prngSample-Uint32AddRotateMultiplyWithReseed.bin.txt)|
    15  |Uint32AddRotateWithReseed|17|15|82|[24.5](./docs/dieharder-results/prngSample-Uint32AddRotateWithReseed.bin.txt)|
    16  |[Uint32MultiplyAdd](https://en.wikipedia.org/wiki/Linear_congruential_generator)|7|3|104|[8.5](./docs/dieharder-results/prngSample-Uint32MultiplyAdd.bin.txt)|
    17  |Uint32MultiplyAddWithReseed|17|26|71|[30](./docs/dieharder-results/prngSample-Uint32MultiplyAddWithReseed.bin.txt)|
    18  |[Uint32PCG](https://en.wikipedia.org/wiki/Permuted_congruential_generator)|22|20|72|[32](./docs/dieharder-results/prngSample-Uint32PCG.bin.txt)|
    19  |Uint32PCGWithReseed|18|22|74|[29](./docs/dieharder-results/prngSample-Uint32PCGWithReseed.bin.txt)|
    20  |[Uint32Xorshift](https://en.wikipedia.org/wiki/Xorshift)|24|12|78|[30](./docs/dieharder-results/prngSample-Uint32Xorshift.bin.txt)|
    21  |Uint32XorshiftWithReseed|29|14|71|[36](./docs/dieharder-results/prngSample-Uint32XorshiftWithReseed.bin.txt)|
    22  |Uint64AddIfShiftXOR| |3|111|[1.5](./docs/dieharder-results/prngSample-Uint64AddIfShiftXOR.bin.txt)|
    23  |Uint64AddIfShiftXORWithReseed|9|4|101|[11](./docs/dieharder-results/prngSample-Uint64AddIfShiftXORWithReseed.bin.txt)|
    24  |Uint64AddNRotateMultiply|17|21|76|[27.5](./docs/dieharder-results/prngSample-Uint64AddNRotateMultiply.bin.txt)|
    25  |Uint64AddNRotateMultiplyWithReseed|21|16|77|[29](./docs/dieharder-results/prngSample-Uint64AddNRotateMultiplyWithReseed.bin.txt)|
    26  |Uint64AddRotate|1|1|112|[1.5](./docs/dieharder-results/prngSample-Uint64AddRotate.bin.txt)|
    27  |Uint64AddRotateMultiply|18|13|83|[24.5](./docs/dieharder-results/prngSample-Uint64AddRotateMultiply.bin.txt)|
    28  |Uint64AddRotateMultiplyWithReseed|20|18|76|[29](./docs/dieharder-results/prngSample-Uint64AddRotateMultiplyWithReseed.bin.txt)|
    29  |Uint64AddRotateWithReseed|24|8|82|[28](./docs/dieharder-results/prngSample-Uint64AddRotateWithReseed.bin.txt)|
    30  |[Uint64MSWS](https://en.wikipedia.org/wiki/Middle-square_method)|23|16|75|[31](./docs/dieharder-results/prngSample-Uint64MSWS.bin.txt)|
    31  |Uint64MSWSWithReseed|16|20|78|[26](./docs/dieharder-results/prngSample-Uint64MSWSWithReseed.bin.txt)|
    32  |[Uint64MultiplyAdd](https://en.wikipedia.org/wiki/Linear_congruential_generator)|11|11|92|[16.5](./docs/dieharder-results/prngSample-Uint64MultiplyAdd.bin.txt)|
    33  |Uint64MultiplyAddWithReseed|20|15|79|[27.5](./docs/dieharder-results/prngSample-Uint64MultiplyAddWithReseed.bin.txt)|
    34  |[Uint64Xorshift](https://en.wikipedia.org/wiki/Xorshift)|26|11|77|[31.5](./docs/dieharder-results/prngSample-Uint64Xorshift.bin.txt)|
    35  |Uint64XorshiftWithReseed|19|16|79|[27](./docs/dieharder-results/prngSample-Uint64XorshiftWithReseed.bin.txt)|
    36  |[Uint64Xoshiro256](https://en.wikipedia.org/wiki/Xorshift#xoshiro_and_xoroshiro)|36|10|68|[41](./docs/dieharder-results/prngSample-Uint64Xoshiro256.bin.txt)|
    37  |Uint64Xoshiro256WithReseed|16|17|81|[24.5](./docs/dieharder-results/prngSample-Uint64Xoshiro256WithReseed.bin.txt)|
    38  |XORUint32AddIfShiftXOR| |1|113|[0.5](./docs/dieharder-results/prngSample-XORUint32AddIfShiftXOR.bin.txt)|
    39  |XORUint32AddIfShiftXORWithReseed|9|4|101|[11](./docs/dieharder-results/prngSample-XORUint32AddIfShiftXORWithReseed.bin.txt)|
    40  |XORUint32AddRotate|1|1|112|[1.5](./docs/dieharder-results/prngSample-XORUint32AddRotate.bin.txt)|
    41  |XORUint32AddRotateMultiply|9|1|104|[9.5](./docs/dieharder-results/prngSample-XORUint32AddRotateMultiply.bin.txt)|
    42  |XORUint32AddRotateMultiplyWithReseed|24|17|73|[32.5](./docs/dieharder-results/prngSample-XORUint32AddRotateMultiplyWithReseed.bin.txt)|
    43  |XORUint32AddRotateWithReseed|17|15|82|[24.5](./docs/dieharder-results/prngSample-XORUint32AddRotateWithReseed.bin.txt)|
    44  |XORUint32MultiplyAdd|8|2|104|[9](./docs/dieharder-results/prngSample-XORUint32MultiplyAdd.bin.txt)|
    45  |XORUint32MultiplyAddWithReseed|17|26|71|[30](./docs/dieharder-results/prngSample-XORUint32MultiplyAddWithReseed.bin.txt)|
    46  |XORUint32PCG|26|15|73|[33.5](./docs/dieharder-results/prngSample-XORUint32PCG.bin.txt)|
    47  |XORUint32PCGWithReseed|18|22|74|[29](./docs/dieharder-results/prngSample-XORUint32PCGWithReseed.bin.txt)|
    48  |XORUint32Xorshift|25|11|78|[30.5](./docs/dieharder-results/prngSample-XORUint32Xorshift.bin.txt)|
    49  |XORUint32XorshiftWithReseed|29|14|71|[36](./docs/dieharder-results/prngSample-XORUint32XorshiftWithReseed.bin.txt)|
    50  |XORUint64AddIfShiftXOR| |3|111|[1.5](./docs/dieharder-results/prngSample-XORUint64AddIfShiftXOR.bin.txt)|
    51  |XORUint64AddIfShiftXORWithReseed|9|4|101|[11](./docs/dieharder-results/prngSample-XORUint64AddIfShiftXORWithReseed.bin.txt)|
    52  |XORUint64AddNRotateMultiply|17|21|76|[27.5](./docs/dieharder-results/prngSample-XORUint64AddNRotateMultiply.bin.txt)|
    53  |XORUint64AddNRotateMultiplyWithReseed|21|16|77|[29](./docs/dieharder-results/prngSample-XORUint64AddNRotateMultiplyWithReseed.bin.txt)|
    54  |XORUint64AddRotate|1|1|112|[1.5](./docs/dieharder-results/prngSample-XORUint64AddRotate.bin.txt)|
    55  |XORUint64AddRotateMultiply|19|10|85|[24](./docs/dieharder-results/prngSample-XORUint64AddRotateMultiply.bin.txt)|
    56  |XORUint64AddRotateMultiplyWithReseed|20|18|76|[29](./docs/dieharder-results/prngSample-XORUint64AddRotateMultiplyWithReseed.bin.txt)|
    57  |XORUint64AddRotateWithReseed|24|8|82|[28](./docs/dieharder-results/prngSample-XORUint64AddRotateWithReseed.bin.txt)|
    58  |XORUint64MSWS|18|10|86|[23](./docs/dieharder-results/prngSample-XORUint64MSWS.bin.txt)|
    59  |XORUint64MSWSWithReseed|16|20|78|[26](./docs/dieharder-results/prngSample-XORUint64MSWSWithReseed.bin.txt)|
    60  |XORUint64MultiplyAdd|11|11|92|[16.5](./docs/dieharder-results/prngSample-XORUint64MultiplyAdd.bin.txt)|
    61  |XORUint64MultiplyAddWithReseed|20|15|79|[27.5](./docs/dieharder-results/prngSample-XORUint64MultiplyAddWithReseed.bin.txt)|
    62  |XORUint64Xorshift|26|11|77|[31.5](./docs/dieharder-results/prngSample-XORUint64Xorshift.bin.txt)|
    63  |XORUint64XorshiftWithReseed|19|16|79|[27](./docs/dieharder-results/prngSample-XORUint64XorshiftWithReseed.bin.txt)|
    64  |XORUint64Xoshiro256|20|19|75|[29.5](./docs/dieharder-results/prngSample-XORUint64Xoshiro256.bin.txt)|
    65  |XORUint64Xoshiro256WithReseed|16|17|81|[24.5](./docs/dieharder-results/prngSample-XORUint64Xoshiro256WithReseed.bin.txt)|
    66  
    67  If you need a fast PRNG then choose the fastest implementation which does not not fail on important-to-you tests.
    68  
    69  Benchmarks:
    70  
    71  ```
    72  BenchmarkReadUint64AddRotateMultiplyWithReseed65536Concurrent-12     	goos: linux
    73  goarch: amd64
    74  pkg: github.com/xaionaro-go/rand/mathrand
    75  BenchmarkReadUint64AddRotateMultiply1-12                             	1000000000	         5.91 ns/op	 169.28 MB/s	       0 B/op	       0 allocs/op
    76  BenchmarkReadUint64AddRotateMultiply16-12                            	1000000000	         5.94 ns/op	2692.28 MB/s	       0 B/op	       0 allocs/op
    77  BenchmarkReadUint64AddRotateMultiply1024-12                          	83157897	       144 ns/op	7096.43 MB/s	       0 B/op	       0 allocs/op
    78  BenchmarkReadUint64AddRotateMultiply65536-12                         	 1319334	      9101 ns/op	7201.32 MB/s	       0 B/op	       0 allocs/op
    79  BenchmarkReadUint64AddRotateMultiply65536Concurrent-12               	 8676526	      1344 ns/op	48746.93 MB/s	       0 B/op	       0 allocs/op
    80  BenchmarkReadUint64AddRotateMultiplyWithReseed1-12                   	1000000000	         5.67 ns/op	 176.32 MB/s	       0 B/op	       0 allocs/op
    81  BenchmarkReadUint64AddRotateMultiplyWithReseed16-12                  	1000000000	         5.81 ns/op	2753.05 MB/s	       0 B/op	       0 allocs/op
    82  BenchmarkReadUint64AddRotateMultiplyWithReseed1024-12                	78509712	       152 ns/op	6739.85 MB/s	       0 B/op	       0 allocs/op
    83  BenchmarkReadUint64AddRotateMultiplyWithReseed65536-12               	 1236812	      9887 ns/op	6628.26 MB/s	       0 B/op	       0 allocs/op
    84  BenchmarkReadUint64AddRotateMultiplyWithReseed65536Concurrent-12     	 5922577	      1973 ns/op	33218.97 MB/s	       0 B/op	       0 allocs/op
    85  BenchmarkReadUint64AddNRotateMultiply1-12                            	1000000000	         7.69 ns/op	 130.08 MB/s	       0 B/op	       0 allocs/op
    86  BenchmarkReadUint64AddNRotateMultiply16-12                           	1000000000	         8.79 ns/op	1819.23 MB/s	       0 B/op	       0 allocs/op
    87  BenchmarkReadUint64AddNRotateMultiply1024-12                         	30040552	       393 ns/op	2602.58 MB/s	       0 B/op	       0 allocs/op
    88  BenchmarkReadUint64AddNRotateMultiply65536-12                        	  478203	     24378 ns/op	2688.32 MB/s	       0 B/op	       0 allocs/op
    89  BenchmarkReadUint64AddNRotateMultiply65536Concurrent-12              	 3086086	      3743 ns/op	17507.67 MB/s	       0 B/op	       0 allocs/op
    90  BenchmarkReadUint64AddNRotateMultiplyWithReseed1-12                  	1000000000	         7.34 ns/op	 136.22 MB/s	       0 B/op	       0 allocs/op
    91  BenchmarkReadUint64AddNRotateMultiplyWithReseed16-12                 	1000000000	         9.17 ns/op	1743.97 MB/s	       0 B/op	       0 allocs/op
    92  BenchmarkReadUint64AddNRotateMultiplyWithReseed1024-12               	29574066	       406 ns/op	2519.95 MB/s	       0 B/op	       0 allocs/op
    93  BenchmarkReadUint64AddNRotateMultiplyWithReseed65536-12              	  467214	     25746 ns/op	2545.47 MB/s	       0 B/op	       0 allocs/op
    94  BenchmarkReadUint64AddNRotateMultiplyWithReseed65536Concurrent-12    	 2858484	      4047 ns/op	16193.68 MB/s	       0 B/op	       0 allocs/op
    95  BenchmarkReadUint64MultiplyAdd1-12                                   	1000000000	         5.51 ns/op	 181.65 MB/s	       0 B/op	       0 allocs/op
    96  BenchmarkReadUint64MultiplyAdd16-12                                  	1000000000	         5.37 ns/op	2979.11 MB/s	       0 B/op	       0 allocs/op
    97  BenchmarkReadUint64MultiplyAdd1024-12                                	100000000	       114 ns/op	8963.90 MB/s	       0 B/op	       0 allocs/op
    98  BenchmarkReadUint64MultiplyAdd65536-12                               	 1639879	      7346 ns/op	8921.67 MB/s	       0 B/op	       0 allocs/op
    99  BenchmarkReadUint64MultiplyAdd65536Concurrent-12                     	 8702646	      1346 ns/op	48698.28 MB/s	       0 B/op	       0 allocs/op
   100  BenchmarkReadUint64MultiplyAddWithReseed1-12                         	1000000000	         5.34 ns/op	 187.42 MB/s	       0 B/op	       0 allocs/op
   101  BenchmarkReadUint64MultiplyAddWithReseed16-12                        	1000000000	         5.51 ns/op	2903.46 MB/s	       0 B/op	       0 allocs/op
   102  BenchmarkReadUint64MultiplyAddWithReseed1024-12                      	96030442	       124 ns/op	8243.72 MB/s	       0 B/op	       0 allocs/op
   103  BenchmarkReadUint64MultiplyAddWithReseed65536-12                     	 1509570	      7828 ns/op	8372.51 MB/s	       0 B/op	       0 allocs/op
   104  BenchmarkReadUint64MultiplyAddWithReseed65536Concurrent-12           	 8741253	      1344 ns/op	48747.50 MB/s	       0 B/op	       0 allocs/op
   105  BenchmarkReadUint64AddRotate1-12                                     	1000000000	         5.63 ns/op	 177.61 MB/s	       0 B/op	       0 allocs/op
   106  BenchmarkReadUint64AddRotate16-12                                    	1000000000	         5.42 ns/op	2952.00 MB/s	       0 B/op	       0 allocs/op
   107  BenchmarkReadUint64AddRotate1024-12                                  	182573494	        67.5 ns/op	15159.29 MB/s	       0 B/op	       0 allocs/op
   108  BenchmarkReadUint64AddRotate65536-12                                 	 3237300	      3904 ns/op	16787.75 MB/s	       0 B/op	       0 allocs/op
   109  BenchmarkReadUint64AddRotate65536Concurrent-12                       	12520366	       895 ns/op	73215.25 MB/s	       0 B/op	       0 allocs/op
   110  BenchmarkReadUint64AddRotateWithReseed1-12                           	1000000000	         5.52 ns/op	 181.08 MB/s	       0 B/op	       0 allocs/op
   111  BenchmarkReadUint64AddRotateWithReseed16-12                          	1000000000	         5.89 ns/op	2717.95 MB/s	       0 B/op	       0 allocs/op
   112  BenchmarkReadUint64AddRotateWithReseed1024-12                        	100000000	       109 ns/op	9368.62 MB/s	       0 B/op	       0 allocs/op
   113  BenchmarkReadUint64AddRotateWithReseed65536-12                       	 1971318	      5898 ns/op	11111.25 MB/s	       0 B/op	       0 allocs/op
   114  BenchmarkReadUint64AddRotateWithReseed65536Concurrent-12             	 8502072	      1377 ns/op	47593.25 MB/s	       0 B/op	       0 allocs/op
   115  BenchmarkReadUint64AddIfShiftXOR1-12                                 	1000000000	         6.84 ns/op	 146.21 MB/s	       0 B/op	       0 allocs/op
   116  BenchmarkReadUint64AddIfShiftXOR16-12                                	1000000000	         5.75 ns/op	2783.81 MB/s	       0 B/op	       0 allocs/op
   117  BenchmarkReadUint64AddIfShiftXOR1024-12                              	96096104	       118 ns/op	8650.74 MB/s	       0 B/op	       0 allocs/op
   118  BenchmarkReadUint64AddIfShiftXOR65536-12                             	 1580743	      7537 ns/op	8694.85 MB/s	       0 B/op	       0 allocs/op
   119  BenchmarkReadUint64AddIfShiftXOR65536Concurrent-12                   	 8580079	      1357 ns/op	48300.82 MB/s	       0 B/op	       0 allocs/op
   120  BenchmarkReadUint64AddIfShiftXORWithReseed1-12                       	1000000000	         6.85 ns/op	 145.93 MB/s	       0 B/op	       0 allocs/op
   121  BenchmarkReadUint64AddIfShiftXORWithReseed16-12                      	1000000000	         6.51 ns/op	2457.85 MB/s	       0 B/op	       0 allocs/op
   122  BenchmarkReadUint64AddIfShiftXORWithReseed1024-12                    	93999710	       127 ns/op	8060.02 MB/s	       0 B/op	       0 allocs/op
   123  BenchmarkReadUint64AddIfShiftXORWithReseed65536-12                   	 1491421	      7904 ns/op	8291.92 MB/s	       0 B/op	       0 allocs/op
   124  BenchmarkReadUint64AddIfShiftXORWithReseed65536Concurrent-12         	 7076581	      1643 ns/op	39884.89 MB/s	       0 B/op	       0 allocs/op
   125  BenchmarkReadUint64Xorshift1-12                                      	1000000000	         5.60 ns/op	 178.64 MB/s	       0 B/op	       0 allocs/op
   126  BenchmarkReadUint64Xorshift16-12                                     	1000000000	         6.03 ns/op	2653.13 MB/s	       0 B/op	       0 allocs/op
   127  BenchmarkReadUint64Xorshift1024-12                                   	65962977	       178 ns/op	5755.88 MB/s	       0 B/op	       0 allocs/op
   128  BenchmarkReadUint64Xorshift65536-12                                  	 1000000	     11162 ns/op	5871.43 MB/s	       0 B/op	       0 allocs/op
   129  BenchmarkReadUint64Xorshift65536Concurrent-12                        	 8347202	      1406 ns/op	46619.89 MB/s	       0 B/op	       0 allocs/op
   130  BenchmarkReadUint64XorshiftWithReseed1-12                            	1000000000	         5.59 ns/op	 178.74 MB/s	       0 B/op	       0 allocs/op
   131  BenchmarkReadUint64XorshiftWithReseed16-12                           	1000000000	         6.32 ns/op	2532.31 MB/s	       0 B/op	       0 allocs/op
   132  BenchmarkReadUint64XorshiftWithReseed1024-12                         	64752655	       184 ns/op	5556.25 MB/s	       0 B/op	       0 allocs/op
   133  BenchmarkReadUint64XorshiftWithReseed65536-12                        	 1000000	     11752 ns/op	5576.69 MB/s	       0 B/op	       0 allocs/op
   134  BenchmarkReadUint64XorshiftWithReseed65536Concurrent-12              	 6884772	      1707 ns/op	38402.60 MB/s	       0 B/op	       0 allocs/op
   135  BenchmarkReadUint64Xoshiro2561-12                                    	1000000000	         8.77 ns/op	 113.99 MB/s	       0 B/op	       0 allocs/op
   136  BenchmarkReadUint64Xoshiro25616-12                                   	1000000000	         7.19 ns/op	2225.54 MB/s	       0 B/op	       0 allocs/op
   137  BenchmarkReadUint64Xoshiro2561024-12                                 	86924043	       135 ns/op	7585.89 MB/s	       0 B/op	       0 allocs/op
   138  BenchmarkReadUint64Xoshiro25665536-12                                	 1419520	      8245 ns/op	7948.93 MB/s	       0 B/op	       0 allocs/op
   139  BenchmarkReadUint64Xoshiro25665536Concurrent-12                      	 5786520	      2001 ns/op	32754.42 MB/s	       0 B/op	       0 allocs/op
   140  BenchmarkReadUint64Xoshiro256WithReseed1-12                          	1000000000	         9.06 ns/op	 110.36 MB/s	       0 B/op	       0 allocs/op
   141  BenchmarkReadUint64Xoshiro256WithReseed16-12                         	1000000000	         7.57 ns/op	2114.84 MB/s	       0 B/op	       0 allocs/op
   142  BenchmarkReadUint64Xoshiro256WithReseed1024-12                       	74240482	       162 ns/op	6338.42 MB/s	       0 B/op	       0 allocs/op
   143  BenchmarkReadUint64Xoshiro256WithReseed65536-12                      	 1242190	      9781 ns/op	6700.03 MB/s	       0 B/op	       0 allocs/op
   144  BenchmarkReadUint64Xoshiro256WithReseed65536Concurrent-12            	 4955490	      2349 ns/op	27900.09 MB/s	       0 B/op	       0 allocs/op
   145  BenchmarkReadUint64MSWS1-12                                          	1000000000	         6.16 ns/op	 162.27 MB/s	       0 B/op	       0 allocs/op
   146  BenchmarkReadUint64MSWS16-12                                         	1000000000	         5.74 ns/op	2785.31 MB/s	       0 B/op	       0 allocs/op
   147  BenchmarkReadUint64MSWS1024-12                                       	68370486	       175 ns/op	5846.41 MB/s	       0 B/op	       0 allocs/op
   148  BenchmarkReadUint64MSWS65536-12                                      	 1000000	     11141 ns/op	5882.29 MB/s	       0 B/op	       0 allocs/op
   149  BenchmarkReadUint64MSWS65536Concurrent-12                            	 8380882	      1411 ns/op	46448.32 MB/s	       0 B/op	       0 allocs/op
   150  BenchmarkReadUint64MSWSWithReseed1-12                                	1000000000	         5.94 ns/op	 168.49 MB/s	       0 B/op	       0 allocs/op
   151  BenchmarkReadUint64MSWSWithReseed16-12                               	1000000000	         5.92 ns/op	2702.21 MB/s	       0 B/op	       0 allocs/op
   152  BenchmarkReadUint64MSWSWithReseed1024-12                             	63563898	       179 ns/op	5709.31 MB/s	       0 B/op	       0 allocs/op
   153  BenchmarkReadUint64MSWSWithReseed65536-12                            	 1000000	     11522 ns/op	5688.06 MB/s	       0 B/op	       0 allocs/op
   154  BenchmarkReadUint64MSWSWithReseed65536Concurrent-12                  	 7868062	      1495 ns/op	43825.05 MB/s	       0 B/op	       0 allocs/op
   155  BenchmarkReadUint32AddRotateMultiply1-12                             	1000000000	         5.32 ns/op	 187.81 MB/s	       0 B/op	       0 allocs/op
   156  BenchmarkReadUint32AddRotateMultiply16-12                            	1000000000	         5.81 ns/op	2752.89 MB/s	       0 B/op	       0 allocs/op
   157  BenchmarkReadUint32AddRotateMultiply1024-12                          	50419069	       232 ns/op	4406.42 MB/s	       0 B/op	       0 allocs/op
   158  BenchmarkReadUint32AddRotateMultiply65536-12                         	  803712	     14584 ns/op	4493.60 MB/s	       0 B/op	       0 allocs/op
   159  BenchmarkReadUint32AddRotateMultiply65536Concurrent-12               	 6675978	      1776 ns/op	36909.88 MB/s	       0 B/op	       0 allocs/op
   160  BenchmarkReadUint32AddRotateMultiplyWithReseed1-12                   	1000000000	         5.38 ns/op	 185.81 MB/s	       0 B/op	       0 allocs/op
   161  BenchmarkReadUint32AddRotateMultiplyWithReseed16-12                  	1000000000	         6.22 ns/op	2570.96 MB/s	       0 B/op	       0 allocs/op
   162  BenchmarkReadUint32AddRotateMultiplyWithReseed1024-12                	50033872	       240 ns/op	4266.25 MB/s	       0 B/op	       0 allocs/op
   163  BenchmarkReadUint32AddRotateMultiplyWithReseed65536-12               	  769466	     15656 ns/op	4185.96 MB/s	       0 B/op	       0 allocs/op
   164  BenchmarkReadUint32AddRotateMultiplyWithReseed65536Concurrent-12     	 6265228	      1862 ns/op	35190.64 MB/s	       0 B/op	       0 allocs/op
   165  BenchmarkReadUint32MultiplyAdd1-12                                   	1000000000	         5.12 ns/op	 195.33 MB/s	       0 B/op	       0 allocs/op
   166  BenchmarkReadUint32MultiplyAdd16-12                                  	1000000000	         6.20 ns/op	2580.01 MB/s	       0 B/op	       0 allocs/op
   167  BenchmarkReadUint32MultiplyAdd1024-12                                	51695251	       230 ns/op	4459.82 MB/s	       0 B/op	       0 allocs/op
   168  BenchmarkReadUint32MultiplyAdd65536-12                               	  809083	     14668 ns/op	4468.03 MB/s	       0 B/op	       0 allocs/op
   169  BenchmarkReadUint32MultiplyAdd65536Concurrent-12                     	 6688881	      1745 ns/op	37553.21 MB/s	       0 B/op	       0 allocs/op
   170  BenchmarkReadUint32MultiplyAddWithReseed1-12                         	1000000000	         5.19 ns/op	 192.58 MB/s	       0 B/op	       0 allocs/op
   171  BenchmarkReadUint32MultiplyAddWithReseed16-12                        	1000000000	         6.51 ns/op	2457.16 MB/s	       0 B/op	       0 allocs/op
   172  BenchmarkReadUint32MultiplyAddWithReseed1024-12                      	49158019	       240 ns/op	4275.36 MB/s	       0 B/op	       0 allocs/op
   173  BenchmarkReadUint32MultiplyAddWithReseed65536-12                     	  784038	     14898 ns/op	4398.93 MB/s	       0 B/op	       0 allocs/op
   174  BenchmarkReadUint32MultiplyAddWithReseed65536Concurrent-12           	 6654824	      1775 ns/op	36927.91 MB/s	       0 B/op	       0 allocs/op
   175  BenchmarkReadUint32AddRotate1-12                                     	1000000000	         5.58 ns/op	 179.24 MB/s	       0 B/op	       0 allocs/op
   176  BenchmarkReadUint32AddRotate16-12                                    	1000000000	         6.17 ns/op	2591.94 MB/s	       0 B/op	       0 allocs/op
   177  BenchmarkReadUint32AddRotate1024-12                                  	146871367	        82.6 ns/op	12395.59 MB/s	       0 B/op	       0 allocs/op
   178  BenchmarkReadUint32AddRotate65536-12                                 	 2419917	      4974 ns/op	13176.65 MB/s	       0 B/op	       0 allocs/op
   179  BenchmarkReadUint32AddRotate65536Concurrent-12                       	10127445	      1147 ns/op	57153.43 MB/s	       0 B/op	       0 allocs/op
   180  BenchmarkReadUint32AddRotateWithReseed1-12                           	1000000000	         5.31 ns/op	 188.28 MB/s	       0 B/op	       0 allocs/op
   181  BenchmarkReadUint32AddRotateWithReseed16-12                          	1000000000	         6.22 ns/op	2573.78 MB/s	       0 B/op	       0 allocs/op
   182  BenchmarkReadUint32AddRotateWithReseed1024-12                        	100000000	       118 ns/op	8674.39 MB/s	       0 B/op	       0 allocs/op
   183  BenchmarkReadUint32AddRotateWithReseed65536-12                       	 1759989	      6783 ns/op	9662.51 MB/s	       0 B/op	       0 allocs/op
   184  BenchmarkReadUint32AddRotateWithReseed65536Concurrent-12             	 6268934	      1703 ns/op	38474.10 MB/s	       0 B/op	       0 allocs/op
   185  BenchmarkReadUint32AddIfShiftXOR1-12                                 	1000000000	         6.77 ns/op	 147.70 MB/s	       0 B/op	       0 allocs/op
   186  BenchmarkReadUint32AddIfShiftXOR16-12                                	1000000000	         6.78 ns/op	2359.86 MB/s	       0 B/op	       0 allocs/op
   187  BenchmarkReadUint32AddIfShiftXOR1024-12                              	51157076	       234 ns/op	4378.01 MB/s	       0 B/op	       0 allocs/op
   188  BenchmarkReadUint32AddIfShiftXOR65536-12                             	  799681	     14744 ns/op	4444.93 MB/s	       0 B/op	       0 allocs/op
   189  BenchmarkReadUint32AddIfShiftXOR65536Concurrent-12                   	 4693885	      2540 ns/op	25799.37 MB/s	       0 B/op	       0 allocs/op
   190  BenchmarkReadUint32AddIfShiftXORWithReseed1-12                       	1000000000	         6.78 ns/op	 147.50 MB/s	       0 B/op	       0 allocs/op
   191  BenchmarkReadUint32AddIfShiftXORWithReseed16-12                      	1000000000	         7.80 ns/op	2050.32 MB/s	       0 B/op	       0 allocs/op
   192  BenchmarkReadUint32AddIfShiftXORWithReseed1024-12                    	47704569	       247 ns/op	4153.08 MB/s	       0 B/op	       0 allocs/op
   193  BenchmarkReadUint32AddIfShiftXORWithReseed65536-12                   	  771753	     15423 ns/op	4249.19 MB/s	       0 B/op	       0 allocs/op
   194  BenchmarkReadUint32AddIfShiftXORWithReseed65536Concurrent-12         	 3737464	      3095 ns/op	21173.48 MB/s	       0 B/op	       0 allocs/op
   195  BenchmarkReadUint32Xorshift1-12                                      	1000000000	         5.57 ns/op	 179.44 MB/s	       0 B/op	       0 allocs/op
   196  BenchmarkReadUint32Xorshift16-12                                     	1000000000	         7.44 ns/op	2150.19 MB/s	       0 B/op	       0 allocs/op
   197  BenchmarkReadUint32Xorshift1024-12                                   	33225739	       352 ns/op	2910.57 MB/s	       0 B/op	       0 allocs/op
   198  BenchmarkReadUint32Xorshift65536-12                                  	  537823	     22274 ns/op	2942.30 MB/s	       0 B/op	       0 allocs/op
   199  BenchmarkReadUint32Xorshift65536Concurrent-12                        	 4218126	      2778 ns/op	23588.19 MB/s	       0 B/op	       0 allocs/op
   200  BenchmarkReadUint32XorshiftWithReseed1-12                            	1000000000	         5.29 ns/op	 188.91 MB/s	       0 B/op	       0 allocs/op
   201  BenchmarkReadUint32XorshiftWithReseed16-12                           	1000000000	         7.89 ns/op	2028.97 MB/s	       0 B/op	       0 allocs/op
   202  BenchmarkReadUint32XorshiftWithReseed1024-12                         	32440348	       368 ns/op	2781.00 MB/s	       0 B/op	       0 allocs/op
   203  BenchmarkReadUint32XorshiftWithReseed65536-12                        	  518901	     23133 ns/op	2833.01 MB/s	       0 B/op	       0 allocs/op
   204  BenchmarkReadUint32XorshiftWithReseed65536Concurrent-12              	 3472923	      3502 ns/op	18713.59 MB/s	       0 B/op	       0 allocs/op
   205  BenchmarkReadUint32PCG1-12                                           	1000000000	         6.85 ns/op	 145.96 MB/s	       0 B/op	       0 allocs/op
   206  BenchmarkReadUint32PCG16-12                                          	941233701	        13.3 ns/op	1204.04 MB/s	       0 B/op	       0 allocs/op
   207  BenchmarkReadUint32PCG1024-12                                        	25314841	       479 ns/op	2139.24 MB/s	       0 B/op	       0 allocs/op
   208  BenchmarkReadUint32PCG65536-12                                       	  403969	     30289 ns/op	2163.68 MB/s	       0 B/op	       0 allocs/op
   209  BenchmarkReadUint32PCG65536Concurrent-12                             	 1735347	      6712 ns/op	9764.48 MB/s	       0 B/op	       0 allocs/op
   210  BenchmarkReadUint32PCGWithReseed1-12                                 	1000000000	         6.68 ns/op	 149.59 MB/s	       0 B/op	       0 allocs/op
   211  BenchmarkReadUint32PCGWithReseed16-12                                	877823248	        13.4 ns/op	1193.18 MB/s	       0 B/op	       0 allocs/op
   212  BenchmarkReadUint32PCGWithReseed1024-12                              	22678197	       551 ns/op	1860.05 MB/s	       0 B/op	       0 allocs/op
   213  BenchmarkReadUint32PCGWithReseed65536-12                             	  357106	     34185 ns/op	1917.10 MB/s	       0 B/op	       0 allocs/op
   214  BenchmarkReadUint32PCGWithReseed65536Concurrent-12                   	 1471394	      7832 ns/op	8367.92 MB/s	       0 B/op	       0 allocs/op
   215  BenchmarkStandardRead1-12                                            	620167975	        19.0 ns/op	  52.51 MB/s	       0 B/op	       0 allocs/op
   216  BenchmarkStandardRead16-12                                           	377367787	        30.9 ns/op	 517.92 MB/s	       0 B/op	       0 allocs/op
   217  BenchmarkStandardRead1024-12                                         	11654818	      1034 ns/op	 990.69 MB/s	       0 B/op	       0 allocs/op
   218  BenchmarkStandardRead65536-12                                        	  183195	     65467 ns/op	1001.06 MB/s	       0 B/op	       0 allocs/op
   219  BenchmarkStandardRead16777216-12                                     	     698	  16642155 ns/op	1008.12 MB/s	       0 B/op	       0 allocs/op
   220  BenchmarkLukechampine1-12                                            	461865512	        23.5 ns/op	  42.61 MB/s	       0 B/op	       0 allocs/op
   221  BenchmarkLukechampine1024-12                                         	36983640	       322 ns/op	3184.26 MB/s	       0 B/op	       0 allocs/op
   222  BenchmarkLukechampine65536-12                                        	  933505	     12436 ns/op	5269.75 MB/s	       0 B/op	       0 allocs/op
   223  BenchmarkLukechampine16777216-12                                     	    3508	   3393452 ns/op	4944.00 MB/s	       0 B/op	       0 allocs/op
   224  BenchmarkUint32AddRotateMultiply-12                                  	1000000000	         1.76 ns/op	2267.26 MB/s	       0 B/op	       0 allocs/op
   225  BenchmarkUint32MultiplyAdd-12                                        	1000000000	         1.86 ns/op	2150.87 MB/s	       0 B/op	       0 allocs/op
   226  BenchmarkUint32AddRotate-12                                          	1000000000	         1.60 ns/op	2500.27 MB/s	       0 B/op	       0 allocs/op
   227  BenchmarkUint32AddIfShiftXOR-12                                      	1000000000	         2.29 ns/op	1747.12 MB/s	       0 B/op	       0 allocs/op
   228  BenchmarkUint32Xorshift-12                                           	1000000000	         2.05 ns/op	1950.09 MB/s	       0 B/op	       0 allocs/op
   229  BenchmarkUint32PCG-12                                                	1000000000	         1.61 ns/op	2491.62 MB/s	       0 B/op	       0 allocs/op
   230  BenchmarkUint64AddRotateMultiply-12                                  	1000000000	         1.95 ns/op	4105.49 MB/s	       0 B/op	       0 allocs/op
   231  BenchmarkUint64AddNRotateMultiply-12                                 	1000000000	         3.70 ns/op	2163.08 MB/s	       0 B/op	       0 allocs/op
   232  BenchmarkUint64MultiplyAdd-12                                        	1000000000	         1.87 ns/op	4267.77 MB/s	       0 B/op	       0 allocs/op
   233  BenchmarkUint64AddRotate-12                                          	1000000000	         1.57 ns/op	5110.60 MB/s	       0 B/op	       0 allocs/op
   234  BenchmarkUint64AddIfShiftXOR-12                                      	1000000000	         2.07 ns/op	3856.38 MB/s	       0 B/op	       0 allocs/op
   235  BenchmarkUint64Xorshift-12                                           	1000000000	         2.11 ns/op	3783.07 MB/s	       0 B/op	       0 allocs/op
   236  BenchmarkUint64Xoshiro256-12                                         	1000000000	         3.41 ns/op	2342.74 MB/s	       0 B/op	       0 allocs/op
   237  BenchmarkUint64MSWS-12                                               	1000000000	         2.08 ns/op	3850.44 MB/s	       0 B/op	       0 allocs/op
   238  BenchmarkStandardIntn-12                                             	688455276	        16.7 ns/op	 479.42 MB/s	       0 B/op	       0 allocs/op
   239  BenchmarkValyalaUint32n-12                                           	755310522	        16.2 ns/op	 247.60 MB/s	       0 B/op	       0 allocs/op
   240  BenchmarkValyalaUint32n_withPreparedRNG-12                           	1000000000	         2.23 ns/op	1793.55 MB/s	       0 B/op	       0 allocs/op
   241  BenchmarkNebulousLabsIntn-12                                         	79827997	       150 ns/op	  53.42 MB/s	       0 B/op	       0 allocs/op
   242  BenchmarkLukechampineUint64n-12                                      	319181235	        36.5 ns/op	 218.92 MB/s	       0 B/op	       0 allocs/op
   243  BenchmarkTimeNowUnixNano-12                                          	336841614	        35.6 ns/op	 224.61 MB/s	       0 B/op	       0 allocs/op
   244  PASS
   245  ok  	github.com/xaionaro-go/rand/mathrand	1801.846s
   246  ```
   247  
   248  
   249  Other fast PRNGs implementations:
   250  
   251  * [Valyala](https://github.com/valyala/fastrand)
   252  * [NebulousLabs](https://gitlab.com/NebulousLabs/fastrand)
   253  * [Lukechampine](https://lukechampine.com/frand)