npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

well-rng

v1.0.1

Published

Lightweight, fast implementation of the WELL-1024a PRNG

Downloads

36

Readme

well-rng

Fast Javascript implementation of the WELL-1024a RNG for node.js and browser

Overview

Install using npm

npm install well-rng

Then, create a new instance of a WELL-1024a generator and use it to produce random numbers:

var WELL = require('well-rng');
var rng = new WELL();
console.log(rng.randInt());

The complete API is very simple, intended to provide a minimal set of functionality while allowing you to maintain multiple PRNGs and manipulate their state. The primary usage case here is one where you wish to duplicate random calculations on both the client and server. For instance, if you have a game implemented in JavaScript and wish to offload processing to the client, you'd send a seed and use it for all of the random numbers produced. Then, if necessary, playback and verification can be performed later on the server to verify scores, etc.

The other obvious case, I suppose, is if you wanted something to replace Math.random() that was higher quality (WELL is relatively new but considered superior to the Mersenne Twister in functional performance and state recovery). I've made attempts at implementing this to be fast, but the implementation of Math.random() is of course still faster. It's still pretty quick though.

Complete API

// Generates a random integer between 0 and 2^31-1
well.randInt();

// Generates a random float between 0 and 1
well.random();

// Generates a random integer between a and b, inclusive
well.randInt(a, b);

// Generates a random integer with the specified number of bits
well.randBits(bits);

// Obtain the current state vector
well.get_state();
well._n;   // state pointer, arguably part of the state as well

// Set the current state vector, optionally as well as the state pointer, to produce
// specific results
well.set_state(state, n);

// The state vector should be a 32-entry array of 32-bit integers.

In terms of performance, well.randBits() offers the fastest generation for small-ish numbers, because it is able to amortize the cost of running the PRNG, which it does by computing 31 bits at once and then returning them in chunks of the requested sizes. Run the benchmark script, bench.js, to get an idea of the relative performance of well-rng and Math.random() for each usage case.