#numbers #java #minimalist #algorithm #xorshift #xorshift128 #libgdx

no-std libgdx-xs128

libgdx Java库中使用的Xorshift128+算法的极简版no_std克隆

4个版本

0.1.3 2023年5月19日
0.1.2 2023年5月18日
0.1.1 2023年5月14日
0.1.0 2023年5月14日

算法中排名1124

每月下载量43

MIT/Apache

22KB
408

libgdx-xs128

Java库libgdx中RandomXS128的极简复制。实现受到sts_map_oracle的启发。单元测试在Java中生成。

功能

  • 使用128位Xorshift算法生成伪随机数。
  • (进行中):在new_rng模块上强制执行no_panic
  • (如有请求):实现RngCoreSeedableRng特性,以兼容使用相同特性的其他Rust库。

使用kani进行模型检查

我们使用kani模型检查器验证模块old_rngnew_rng的部分等价性(Github, 网站, crates.io, lib.rs)。这有助于我们将new_rng重构为始终编译而不会出现单个panic

无panic的进展

graph LR;
    
    classDef Complete stroke:#27ae60,stroke-width:2px;
    classDef Incomplete stroke:#f39c12,stroke-width:2px;

    Green[green means cannot panic]:::Complete --required for--> Orange[orange means may panic]:::Incomplete;
    
    From_u64_u64:::Incomplete;
    new:::Incomplete;
    From_SeedInitializer:::Incomplete;
    murmur_hash3:::Incomplete;
    inverse_murmur_hash3:::Incomplete;
    shr_33:::Incomplete;
    wrapping_const_mul:::Incomplete;
    From_i64:::Incomplete;

    new --i64 as u64--> From_i64;
    From_SeedInitializer --Seed--> new;

    From_u64_u64 --SeedPair--> From_SeedInitializer;
    
    murmur_hash3 --Seed & Seed0--> From_SeedInitializer;
    inverse_murmur_hash3 --Seed1--> From_SeedInitializer;


    shr_33 --> murmur_hash3;
    shr_33 --> inverse_murmur_hash3;
    
    wrapping_const_mul --> murmur_hash3;
    wrapping_const_mul --> inverse_murmur_hash3;

    next_u64:::Incomplete;
    overflowing_next_capped_u64:::Incomplete;
    advance:::Incomplete;
    unchecked_next_capped_u64:::Incomplete;
    next_capped_u64:::Incomplete;

    next_u64 --> overflowing_next_capped_u64;
    next_u64 --> advance;
    overflowing_next_capped_u64 --> unchecked_next_capped_u64;
    overflowing_next_capped_u64 --> next_capped_u64;

许可证

双许可,以兼容Rust项目。

根据您的选择,在Apache许可证,版本2.0MIT许可证下授权。此文件可能不按照这些条款进行复制、修改或分发。

无运行时依赖项

功能