当前位置: 首页 > news >正文

java17学习笔记-增强型伪随机数生成器

JEP 356: Enhanced Pseudo-Random Number Generators

为伪随机数提供新的接口类型和生成器 (PRNG),包括可跳转的 PRNG 和附加类 可拆分的 PRNG 算法 (LXM)。

提供了一个新的接口RandomGenerator,它提供了一个 适用于所有现有和新 PRNG 的统一 API。 RandomGenerator提供intslongsdoublesnextBooleannextIntnextLongnextDouble, and nextFloat的方法及其所有当前参数变体。

四个新的专用 RandomGenerator 接口:

SplittableRandomGenerator extends RandomGenerator 提供了split 和splits两个方法

可分割性允许用户从现有的RandomGenerator中生成一个新的RandomGenerator,该RandomGeneraker通常会产生统计上独立的结果。

创建SplittableGenerator类型的Random

        var  splittableRandom = new SplittableRandom();        var l32X64MixRandom = RandomGeneratorFactory.of("L32X64MixRandom");System.out.println(l32X64MixRandom.create().nextBoolean());var splittableGenerator = andomGenerator.SplittableGenerator.of("L32X64MixRandom");System.out.println(splittableGenerator.nextBoolean());
case "SplittableRandom" -> new SplittableRandom();
case "L32X64MixRandom" ->       new L32X64MixRandom();
case "L64X128MixRandom" ->      new L64X128MixRandom();
case "L64X128StarStarRandom" -> new L64X128StarStarRandom();
case "L64X256MixRandom" ->      new L64X256MixRandom();
case "L64X1024MixRandom" ->     new L64X1024MixRandom();
case "L128X128MixRandom" ->     new L128X128MixRandom();
case "L128X256MixRandom" ->     new L128X256MixRandom();
case "L128X1024MixRandom" ->    new L128X1024MixRandom();
可选参数和官方文档给出的不一样,这里需要注意一下

split 和splits两个方法

        var  splittableRandom = new SplittableRandom();splittableRandom.splits(3).forEach(item->{System.out.println(item.nextBoolean());});SplittableRandom split = splittableRandom.split();System.out.println(split.nextBoolean());

JumpableRandomGenerator extends RandomGenerator 提供了jump和jumps两个方法

跳跃性允许用户在中等数量的平局中向前跳跃。

作者一开始认为跳跃是跳过下一次随机数,会影响最终概率,但是发现并影响结果。

网上也看了很多博主的文章都是清一色的RandomGeneratorFactory.jumpable(),也不知道怎么来的,反正我是找不到jumpable()方法。    

        var splittableGenerator = RandomGenerator.JumpableGenerator.of("Xoshiro256PlusPlus");splittableGenerator.jumps(4).forEach(item->{System.out.println(item.nextBoolean());});RandomGeneratorFactory<RandomGenerator.JumpableGenerator> factory = RandomGeneratorFactory.of("Xoshiro256PlusPlus");RandomGenerator.JumpableGenerator jumpable = factory.create();int trueCount = 0, falseCount = 0, totalCount = 10000;for (int i = 0; i < totalCount; i++) {double d = jumpable.nextDouble(100.00);if (d > 60.00) {trueCount++;} else {falseCount++;jumpable.jump();jumpable.jump();}}System.out.println(trueCount);System.out.println(falseCount);System.out.println(trueCount * 1.00 / totalCount);
case "Xoroshiro128PlusPlus" ->  new Xoroshiro128PlusPlus();
case "Xoshiro256PlusPlus" ->    new Xoshiro256PlusPlus();

LeapableRandomGenerator extends RandomGenerator 还提供方法命名为leap和jumps。Leapability允许用户跳过大量的绘图。

目前还没有找到可以使用的创建方法只能new RandomGenerator.LeapableGenerator(),然后实现接口未实现的方法来创建

ArbitrarilyJumpableRandomGenerat extends LeapableRandomGenerator提供了还提供了jump和jumps的其他变体,允许指定任意跳跃距离

同上

最实用的部分是新加了线程安全的随机数ThreadLocalRandom,使用如下

        ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();System.out.println(threadLocalRandom.nextBoolean());

http://www.dtcms.com/a/338063.html

相关文章:

  • LeetCode100-438找到字符串中所有的字母异位词
  • 上网行为管理之用户认证技术和应用控制技术
  • 开源im即时通讯软件开发社交系统全解析:安全可控、功能全面的社交解决方案
  • 具身智能3全身动力学控制软件包(人形机器人)摘自Openloong社区
  • N32G430C8-串口驱动问题
  • MATLAB的实用字母识别系统实现含GUI界面
  • 软件在线安装和离线安装
  • c/c++标准库
  • GISer大事件,保研考研竞赛时间线一览
  • Java中的128陷阱:深入解析Integer缓存机制及应对策略
  • 为什么体育应用离不开 API?数据接入基础指南
  • ae关键帧路径显示不完全怎么办
  • Linux 服务:RAID 级别解析与 mdadm 工具实操指南
  • 【Vue】Vue3检测滚动到底部
  • week2-[循环嵌套]数位和为m倍数的数
  • 牛客周赛 Round 105(小苯的xor构造/小苯的权值计算/小苯的01矩阵构造/小苯的重排构造/小苯的xor图/小苯的前缀gcd构造)
  • 【石油化工行业SAP整体解决方案内容总结】
  • 直播平台如何集成美颜SDK与动态贴纸?开发流程与实战指南
  • 场外期权的股票停牌了怎么处理?
  • 【tips】unsafe-eval线上页面突然空白
  • 基于Transformer+多模态图像融合取得最新突破的创新点分析
  • diffuxers学习--AutoPipeline
  • 申请免费的SSL证书,到期一键续签
  • 从 ORA-12703 到顺利入库:Go + Oracle 11g GBK 字符集踩坑记20250818
  • 【数据结构】深入理解双向链表:结构、实现与对比分析
  • 【DDIA】第十章:解析Reduce端连接与分组技术
  • Java基础 8.18
  • lamp架构部署wordpress
  • 在开发后端API的时候,哪些中间件比较实用
  • Less( 预处理语言)的使用方法