# @lazy-random/generators-xor128

> 以 xorshift128 擬隨機演算法 (PRNG Algorithm) 為核心的可設定種子 (Seedable) 亂數產生器 (Random Number Generator)

Latest version **2.0.1** (published 2026-10-05) · ISC license · 0 weekly downloads

## Install

```sh
npm install @lazy-random/generators-xor128
pnpm add @lazy-random/generators-xor128
yarn add @lazy-random/generators-xor128
bun add @lazy-random/generators-xor128
```

## Health

**Score 70/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 2.0.1 |
| Published | 2026-10-05 |
| First published | 2021-12-12 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 3 |
| Unpacked size | 92 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | bluelovers |
| Maintainers | bluelovers |
| Keywords | lazy-random, xor128, xorshift128, seedable, seed, prng, pseudorandom, random-number-generator, rng, 128-bit, generator, create-by-yarn-tool, create-by-tsdx |

## Links

- npm: https://www.npmjs.com/package/@lazy-random/generators-xor128
- Repository: https://github.com/bluelovers/ws-random
- Homepage: https://github.com/bluelovers/ws-random/tree/master/packages/@lazy-random/generators-xor128#readme
- Issues: https://github.com/bluelovers/ws-random/issues
- npm.io page: https://npm.io/package/@lazy-random/generators-xor128

## Dependencies (3)

- [@lazy-random/seed-token](https://npm.io/package/@lazy-random/seed-token.md) ^2.0.1
- [@lazy-random/clone-class](https://npm.io/package/@lazy-random/clone-class.md) ^2.0.1
- [@lazy-random/rng-abstract](https://npm.io/package/@lazy-random/rng-abstract.md) ^2.0.1

## Alternatives

- [localforage](https://npm.io/package/localforage.md) — 6.2M weekly downloads
- [localforage-observable](https://npm.io/package/localforage-observable.md) — 30.8K weekly downloads
- [@y/y](https://npm.io/package/@y/y.md) — 30.1K weekly downloads
- [@metaobjectsdev/render](https://npm.io/package/@metaobjectsdev/render.md) — 3.5K weekly downloads
- [@ledgerhq/coin-algorand](https://npm.io/package/@ledgerhq/coin-algorand.md) — 1.1K weekly downloads

## Recent versions

- 2.0.1 (latest) — 2026-10-05
- 1.0.11 — 2023-11-19
- 1.0.9 — 2022-10-29
- 1.0.8 — 2022-01-04
- 1.0.7 — 2022-01-03
- 1.0.6 — 2021-12-21
- 1.0.4 — 2021-12-12

## README

# @lazy-random/generators-xor128

以 xorshift128 擬隨機演算法 (PRNG Algorithm) 為核心的可設定種子 (Seedable) 亂數產生器 (Random Number Generator)，隸屬 `@lazy-random` 系列套件。

本套件以 `RNGXOR128` 類別繼承 `@lazy-random/rng-abstract` 的 `RNG`，內部以 `x`、`y`、`z`、`w` 四個 32 位元狀態字 (State Word) 維護 128 位元狀態 (128-bit State)，每次 `next()` 推進一輪狀態並將結果映射為 `[0, 1)` 區間的亂數 (Random Number)。

## 特色 (Features)

- 128 位元狀態的 xorshift128 擬隨機演算法 (PRNG Algorithm)，無外部相依演算法庫
- 支援單一種子 (Seed) 或逐字指定四個狀態字的兩種建構方式，省略的位置以 `randomSeedNum()` 補齊
- `seedable` 回傳 `true`，可隨時以 `seed()` 重新播种 (Reseed)，並自動捨棄開頭 64 個輸出做預熱 (Warm-up)
- 提供 `clone()` 複製實例
- 同時提供 CommonJS (`dist/index.cjs`) 與 ECMAScript Module (`dist/index.esm.mjs`) 兩種輸出，並附帶型別宣告 (`dist/index.d.ts`)

## 安裝 (Installation)

```bash
yarn add @lazy-random/generators-xor128
yarn-tool add @lazy-random/generators-xor128
yt add @lazy-random/generators-xor128
```

## 使用方式 (Usage)

基本用法（省略的狀態字以隨機數補齊）：

```ts
import RNGXOR128 from '@lazy-random/generators-xor128'

const rng = new RNGXOR128()

console.log(rng.name) // 'xor128'
console.log(rng.next()) // 取得下一個 [0, 1) 區間的亂數 (Random Number)
```

以單一種子建立：

```ts
import RNGXOR128 from '@lazy-random/generators-xor128'

const rng = new RNGXOR128('my seed')
```

逐字指定四個狀態字 (State Word)：

```ts
import RNGXOR128 from '@lazy-random/generators-xor128'

const rng = new RNGXOR128(1, 2, 3, 4)
```

重新播种 (Reseed) 與複製 (Clone)：

```ts
rng.seed('another seed')
const copied = rng.clone()
```

## API 文件 (API Documentation)

### `class RNGXOR128`

繼承自 `RNG`（`@lazy-random/rng-abstract`）。

#### `constructor(seed?, ...argv)` / `constructor(x?, y?, z?, w?, ...argv)`

兩種簽章：

- `(seed, ...argv)`：以單一種子初始化，四個狀態字中省略者以 `randomSeedNum()` 補齊
- `(x?, y?, z?, w?, ...argv)`：逐字指定四個狀態字，同樣以 `randomSeedNum()` 補齊省略值

| 參數 (Parameter) | 型別 (Type) | 說明 (Description) |
| --- | --- | --- |
| `seed` / `x` | `number` | 第一個狀態字 (First state word) 或單一種子 (Single seed)；傳入非數字時由 `_seedNum()` 轉換 |
| `y` / `z` / `w` | `number` | 其餘狀態字 (Remaining state words)，可省略；傳入非數字時沿用目前狀態 |
| `...argv` | `any[]` | 其餘參數，原樣轉交 `_init()` |

#### `next(): number`

推進一輪 xorshift128 狀態 (State)，回傳 `[0, 1)` 區間的浮點數 (Float)。

#### `seed(seed?, opts?, ...argv): void`

重新播种 (Reseed)：以新值重設狀態字，並捨棄開頭 64 個輸出做預熱 (Warm-up)，確保序列避開未充分混合的初始狀態。

> 注意 (Note)：參數依位置 (Positional) 傳入內部 `_seed(x, y, z, w)`，因此第二個參數（基類簽章名為 `opts`）在本實作中對應狀態字 `y`；傳入非數字時會沿用目前狀態。

#### `clone(seed?, opts?, ...argv): RNGXOR128`

以目前實例的狀態複製出新的 `RNGXOR128`。

#### `get name(): string`

回傳產生器名稱 (Generator Name) `'xor128'`。

#### `get seedable(): boolean`

固定回傳 `true`，表示此產生器可設定種子 (Seedable)。

### 預設匯出 (Default Export)

`RNGXOR128` 同時為具名匯出 (Named Export) 與預設匯出。

## 開發 (Development)

專案根目錄使用 pnpm + lerna 的 monorepo 結構，本套件常見指令：

```bash
pnpm run build   # 以 tsdx 建置 dist，並輸出型別宣告
pnpm run test    # 執行測試
pnpm run lint    # 執行 ESLint
```

## 變更日誌 (Changelog)

請見 [CHANGELOG.md](./CHANGELOG.md)。

## 相關資源 (Related Resources)

- 原始碼倉庫 (Repository)：<https://github.com/bluelovers/ws-random>
- 問題回報 (Issues)：<https://github.com/bluelovers/ws-random/issues>
- 相依套件 (Dependencies)：[@lazy-random/rng-abstract](https://www.npmjs.com/package/@lazy-random/rng-abstract)、[@lazy-random/seed-token](https://www.npmjs.com/package/@lazy-random/seed-token)、[@lazy-random/clone-class](https://www.npmjs.com/package/@lazy-random/clone-class)

---
_Source: https://npm.io/package/@lazy-random/generators-xor128 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
