# gaussian-random **Repository Path**: nodets/gaussian-random ## Basic Information - **Project Name**: gaussian-random - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-22 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gaussian-random 一个高效生成符合正态分布(均值为0,标准差可通过`scale`参数自定义)随机数及数组的工具库,支持ESM、CJS、IIFE多种模块格式,适用于浏览器和Node.js环境。 ## 特性 - 基于Box-Muller变换生成正态分布随机数,数学严谨,可通过`scale`参数控制标准差(默认生成标准正态分布N(0,1)) - 内置随机数缓存机制,减少50%计算量,性能更优 - 支持生成普通数组、32位浮点数数组(Float32Array)、64位浮点数数组(Float64Array) - 完整的参数校验(非负整数长度、非负标准差),提升使用健壮性 - 支持多种模块格式:ESM、CJS、IIFE(浏览器全局变量) ## 安装 ### 使用npm/yarn/pnpm ```bash # npm npm install gaussian-random # yarn yarn add gaussian-random # pnpm pnpm add gaussian-random ``` ### 浏览器直接引入(IIFE) 通过CDN引入(支持unpkg、jsDelivr等): ```html ``` 引入后可通过全局变量 `gaussianRandom` 使用(如 `gaussianRandom.random(2)`)。 ## 使用方法 ### ESM 环境(如现代浏览器、Vite、Webpack等) ```javascript import { random, randomArr, random32, random64 } from 'gaussian-random'; // 生成单个标准正态分布(scale=1,N(0,1))随机数 const num1 = random(); // 生成单个标准差为2的正态分布(N(0,4))随机数 const num2 = random(2); // 生成包含5个元素、标准差为0.5的普通数组(N(0,0.25)) const arr = randomArr(5, 0.5); // 生成包含10个元素、标准差为3的32位浮点数数组(N(0,9)) const float32Arr = random32(10, 3); // 生成包含8个元素、默认标准差的64位浮点数数组(N(0,1)) const float64Arr = random64(8); ``` ### CJS 环境(如Node.js) ```javascript const { random, randomArr, random32, random64 } = require('gaussian-random'); // 用法同上 const num = random(1.5); // 生成N(0, 2.25)分布的随机数 ``` ### 浏览器全局环境(IIFE) ```html ``` ## API 文档 ### `random(scale?: number): number` 生成一个符合正态分布(均值=0,标准差=scale)的随机数。 **参数**: - `scale`:可选,标准差,控制分布的离散程度,必须为非负数(≥0),默认值为1。 - 当`scale=1`时,生成标准正态分布N(0,1) - 当`scale=σ`时,生成N(0, σ²)分布 **返回值**:符合N(0, scale²)分布的随机数(number)。 **抛出错误**:若`scale`为负数或非数字,将抛出`Error`。 **原理**:基于Box-Muller变换实现,通过缓存变换过程中生成的第二个随机数,减少50%的计算量(平均每次调用仅需执行一次变换的1/2计算)。 ### `randomArr(n: number, scale?: number): number[]` 生成包含`n`个符合正态分布(均值=0,标准差=scale)随机数的普通数组。 **参数**: - `n`:数组长度,必须为非负整数(≥0且为整数)。 - `scale`:可选,标准差,非负数,默认值为1。 **返回值**:元素为N(0, scale²)分布随机数的`number[]`数组。 **抛出错误**:若`n`为负数/非整数,或`scale`为负数/非数字,将抛出`Error`。 ### `random32(n: number, scale?: number): Float32Array` 生成包含`n`个符合正态分布(均值=0,标准差=scale)随机数的32位浮点数数组(节省内存,适用于精度要求不高的场景)。 **参数**: - `n`:数组长度,必须为非负整数(≥0且为整数)。 - `scale`:可选,标准差,非负数,默认值为1。 **返回值**:元素为N(0, scale²)分布随机数的`Float32Array`。 **抛出错误**:若`n`为负数/非整数,或`scale`为负数/非数字,将抛出`Error`。 ### `random64(n: number, scale?: number): Float64Array` 生成包含`n`个符合正态分布(均值=0,标准差=scale)随机数的64位浮点数数组(高精度,适用于对精度要求较高的场景)。 **参数**: - `n`:数组长度,必须为非负整数(≥0且为整数)。 - `scale`:可选,标准差,非负数,默认值为1。 **返回值**:元素为N(0, scale²)分布随机数的`Float64Array`。 **抛出错误**:若`n`为负数/非整数,或`scale`为负数/非数字,将抛出`Error`。 ## 示例 ```javascript import { random, randomArr, random32, random64 } from 'gaussian-random'; // 生成单个标准正态分布随机数(scale=1) console.log(random()); // 示例输出:0.3421(服从N(0,1)) // 生成单个标准差为2的随机数(N(0,4)) console.log(random(2)); // 示例输出:2.684(约95%概率落在[-4,4]) // 生成包含3个元素、标准差0.5的普通数组(N(0,0.25)) console.log(randomArr(3, 0.5)); // 示例输出:[-0.32, 0.15, -0.47] // 生成10个元素的32位浮点数数组(scale=3,N(0,9)) const float32 = random32(10, 3); console.log(float32.byteLength); // 输出:40(10 * 4字节) console.log(float32[0]); // 示例输出:4.12(约99.7%概率落在[-9,9]) // 生成5个元素的64位浮点数数组(默认scale=1) const float64 = random64(5); console.log(float64.byteLength); // 输出:40(5 * 8字节) ``` ## 注意事项 1. **参数校验**:所有函数对`n`(非负整数)和`scale`(非负数)有严格校验,无效值会抛出`Error`。 2. **随机性依赖**:随机数基于JavaScript原生`Math.random()`生成,其随机性依赖于运行环境的实现。 3. **正态分布特性**:对于给定`scale=σ`,约68%的数值落在`[-σ, σ]`,约95%落在`[-2σ, 2σ]`,约99.7%落在`[-3σ, 3σ]`。 4. **性能优化**:`random`函数通过缓存Box-Muller变换的结果,平均减少50%计算量,`scale`参数不影响这一优化。 ## 许可证 MIT