# xorshift
**Repository Path**: mirrors_developit/xorshift
## Basic Information
- **Project Name**: xorshift
- **Description**: Random number generator using xorshift128+
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-08-14
- **Last Updated**: 2025-12-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# xorshift [](https://travis-ci.org/AndreasMadsen/xorshift)
> Pseudorandom number generator using [xorshift128+](http://xorshift.di.unimi.it/)
## Installation
```bash
npm install xorshift
```
## Example
```javascript
var xorshift = require('xorshift');
for (var i = 0; i < 10; i++) {
console.log(xorshift.random()); // number in range [0, 1)
}
```
## Documentation
This module exports a default pseudo random generator. This generators seed have
already been set (using `Date.now()`). If this is not suitable a custom
generator can be initialized using the constructor function
`xorshift.constructor`. In both cases random numbers can be generated using
the two methods `.random` and `.randomint`.
```javascript
var xorshift = require('xorshift');
```
### xorshift.random()
This method returns a random 64-bit double, with its value in the range [0, 1).
That means 0 is inclusive and 1 is exclusive. This is equivalent to
`Math.random()`.
```javascript
console.log(xorshift.random()); // number between 0 and 1
```
This method will serve most purposes, for instance to randomly select between
2, 3 and 4, this function can be used:
```javascript
function uniformint(a, b) {
return Math.floor(a + xorshift().random() * (b - a));
}
console.log(uniformint(2, 4));
```
### xorshift.randomint()
This method returns a random 64-bit integer. Since JavaScript doesn't support
64-bit integers, the number is represented as an array with two elements in
big-endian order.
This method is useful if high precision is required, the `xorshift.random()`
method won't allow you to get this precision since a 64-bit IEEE754 double
only contains the 52 most significant bits.
```javascript
var bview = require('binary-view');
console.log(bview( new Uint32Array(xorshift.randomint()) ));
```
### xorshift.constructor
This method is used to construct a new random generator, with a specific seed.
This is useful when testing software where random numbers are involved and
getting consistent results is important.
```javascript
var XorShift = require('xorshift').constructor;
var rng1 = new XorShift([1, 0, 2, 0]);
var rng2 = new XorShift([1, 0, 2, 0]);
assert(rng1.random() === rng2.random());
```
A `XorShift` instance have both methods `random` and `randomint`. In fact the
`xorshift` module is an instance of the `XorShift` constructor.
## Reference
This module implements the xorshift128+ pseudo random number generator.
> This is the fastest generator passing BigCrush without systematic
> errors, but due to the relatively short period it is acceptable only
> for applications with a very mild amount of parallelism; otherwise, use
> a xorshift1024* generator.
> – http://xorshift.di.unimi.it
This source also has a
[reference implementation](http://xorshift.di.unimi.it/xorshift128plus.c)
for the xorshift128+ generator. A wrapper around this implementation has been
created and is used for testing this module. To compile and run it:
```shell
gcc -O2 reference.c -o reference
./reference
```
* `` can be any number greater than zero, and it will be the number
of random numbers written to `stdout`. The default value is `10`.
* `` and `` forms the 128bit seed that the algorithm uses. Default
is `[1, 2]`.
## License
**This software is licensed under "MIT"**
> Copyright (c) 2014 Andreas Madsen & Emil Bay
>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.