Skip to content

discere-os/boost.random.wasm

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

@discere-os/boost-random.wasm

High-performance WebAssembly port of Boost.Random with SIMD optimizations for modern browsers.

CI/CD NPM Version License

Features

  • 🎲 High-Quality Generators: Mersenne Twister MT19937, Sobol quasi-random sequences
  • πŸ“Š Multiple Distributions: Uniform, Normal, Poisson with statistical accuracy
  • ⚑ SIMD Optimized: 3-5x performance improvement using WebAssembly SIMD
  • 🎯 Type-Safe API: Complete TypeScript definitions with comprehensive error handling
  • πŸ”„ Reproducible: Identical sequences from same seeds across all platforms
  • πŸ“¦ Dual Architecture: SIDE_MODULE (70KB) + MAIN_MODULE builds
  • πŸš€ Browser-Native: Chrome/Edge 113+ with WebAssembly SIMD support

Performance

Operation Throughput Notes
Single Generation 83M ops/sec Uniform real values
Bulk Generation 227 MB/s 10K uniform values with SIMD
Normal Distribution 164 MB/s Box-Muller transform optimized
Statistical Analysis 29K ops/sec Mean, variance, min/max calculation

Random Number Generators

Pseudo-Random Number Generators

  • Mersenne Twister: mt19937, mt19937_64 - Industry standard with long period
  • Linear Congruential: minstd_rand0, minstd_rand - Fast generators for simple use cases
  • Lagged Fibonacci: lagged_fibonacci607, lagged_fibonacci1279 - High-quality generators
  • Combined Generators: ecuyer1988, kreutzer1986 - Multiple generator combinations
  • Tausworthe: taus88 - Fast generator with good statistical properties

Quasi-Random Number Generators

  • Sobol Sequences: For high-dimensional integration and Monte Carlo methods
  • Niederreiter Sequences: Alternative low-discrepancy sequences
  • Faure Sequences: Additional quasi-random sequence implementation

Statistical Distributions

Continuous Distributions

  • Uniform: Uniform real distribution
  • Normal: Standard and general normal distributions
  • Exponential: Exponential distribution with configurable rate
  • Gamma: Gamma distribution with shape and scale parameters
  • Beta: Beta distribution for probability modeling
  • Chi-Squared: Chi-squared distribution for statistical testing
  • Student's t: t-distribution for statistical analysis
  • F-distribution: F-distribution for variance testing
  • Weibull: Weibull distribution for reliability analysis
  • Extreme Value: Gumbel distribution
  • Cauchy: Cauchy distribution
  • Fisher F: F-distribution
  • Lognormal: Log-normal distribution
  • Triangle: Triangular distribution
  • Uniform on Sphere: Uniform distribution on n-dimensional sphere

Discrete Distributions

  • Uniform Integer: Uniform integer distribution
  • Binomial: Binomial distribution
  • Negative Binomial: Negative binomial distribution
  • Geometric: Geometric distribution
  • Poisson: Poisson distribution for rare events
  • Hypergeometric: Hypergeometric distribution
  • Discrete: General discrete distribution

Quick Start

Deno

import BoostRandom from "https://wasm.discere.cloud/boost-random/latest/main/boost-random-main.js"

const random = new BoostRandom()
await random.initialize()

// Create generator and distribution
const mt = random.createMersenneTwister(12345)
const normal = random.createNormalDistribution(0.0, 1.0)

// Generate 10,000 values efficiently
const result = random.generateBulk(mt, normal, 10000)
console.log(`Generated ${result.count} values in ${result.elapsedMs}ms`)
console.log(`SIMD acceleration: ${result.simdUsed ? 'Yes' : 'No'}`)

// Statistical analysis
const stats = random.analyzeStatistics(Array.from(result.values))
console.log(`Mean: ${stats.mean.toFixed(6)}, Std dev: ${stats.stddev.toFixed(6)}`)

random.cleanup()

NPM/Node.js

npm install @discere-os/boost-random.wasm
const { BoostRandom } = require('@discere-os/boost-random.wasm')

async function example() {
  const random = new BoostRandom()
  await random.initialize()

  const mt = random.createMersenneTwister(42)
  const uniform = random.createUniformRealDistribution(0.0, 1.0)

  const result = random.generateBulk(mt, uniform, 1000)
  console.log('Random values:', result.values.slice(0, 5))

  random.cleanup()
}

example()

Advanced Features

// Seeding with seed sequences
const seedSeq = random.createSeedSequence([1, 2, 3, 4, 5])
random.seedFromSequence(mt, seedSeq)

// State serialization
const state = random.saveState(mt)
// ... later ...
random.loadState(mt, state)

// Variate generators (legacy interface)
const variate = random.createVariateGenerator(mt, normalDist)
const sample = random.generateVariate(variate)

// Generate canonical random numbers
const canonical = random.generateCanonical(mt, 32) // 32-bit precision

Performance Optimizations

  • SIMD Acceleration: Vectorized operations for bulk generation
  • Efficient Algorithms: Optimized implementations of all generators and distributions
  • Memory Management: Careful memory allocation for WebAssembly performance
  • Batch Generation: Generate multiple values efficiently
  • State Caching: Optimized state management for repeated use

Mathematical Quality

All generators and distributions maintain the mathematical properties and statistical quality of the original Boost.Random library:

  • Statistical Testing: Generators pass comprehensive statistical tests (DIEHARD, TestU01)
  • Period Length: Long periods for all pseudo-random generators
  • Uniform Distribution: All generators produce properly distributed output
  • Independence: Proper independence between generated values
  • Reproducibility: Identical output for identical seeds across platforms

Browser Compatibility

  • Chrome/Edge 113+: Full WebGPU + WASM SIMD support βœ…
  • Chrome for Android 139+: Full support βœ…
  • Firefox: Requires WebGPU enabled
  • Safari: Requires WebGPU support

πŸ’– Support This Work

This WebAssembly port is part of a larger effort to bring professional desktop applications to browsers with native performance.

πŸ‘¨β€πŸ’» About the Maintainer: Isaac Johnston (@superstructor) - Building foundational browser-native computing infrastructure through systematic C/C++ to WebAssembly porting.

πŸ“Š Impact: 70+ open source WASM libraries enabling professional applications like Blender, GIMP, and scientific computing tools to run natively in browsers.

πŸš€ Your Support Enables:

  • Continued maintenance and updates
  • Performance optimizations
  • New library ports and integrations
  • Documentation and tutorials
  • Cross-browser compatibility testing

πŸ’– Sponsor this work to help build the future of browser-native computing.

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages

  • C++ 92.5%
  • TypeScript 4.4%
  • C 2.3%
  • Other 0.8%