使用kbmmw中的随机数替换delphi 10.3 自带的随机数
我们在开发中经常会使用随机数模拟各种随机条件,例如生成唯一的密码和令牌。
在计算机中,一般采用PRNG(伪随机序列发生器)模拟真实随机数。既然是随机,就要要没有任何规律,
在取值范围内均匀、独立。以确保尽量不重复。否则生成的密码和令牌碰撞的几率就非常大。
delphi自带的随机数函数,看似随机,实际上当产生次数足够多的话,就会发现重复性非常大,而且向中心域
集中。如果我们用delphi自带的随机数生成一个区域的点,就会很方便的发现这个问题。

kbmmw 5.8里面 提供了好几种流行的随机数生成实现。例如PCG、 Mersenne Twister、SplitMix、Xoroshiro等。
甚至提供了几个利用CPU 自身功能生成伪随机数的函数。


我们可以明显的看出来,这两个图中的点非常随机、均匀。因此,我们在开发中尽量使用kbmmw 提供的随机函数。
喜大普奔,delphi10.3 里面提供了可替换随机数生成的功能。
我们可以很方便的让delphi 不用更改代码(或者没有代码的情况一下),就可以享受这些好的功能和算法。
首先,我们做一个函数,当然记住要引用kbmMWRandom。
function xalionrandom32:UInt32;
begin result:= kbmMWRandom32.Random; end;
然后在工程文件里面加上三行。
Application.Initialize;
//加上这三行
{$IF CompilerVersion >= 33}
Random32Proc:= xalionrandom32;
{$ENDIF}
ok, 我们的程序就可以享受这个福利了。
使用kbmmw中的随机数替换delphi 10.3 自带的随机数的更多相关文章
- kbmMW TkbmMWHashSHA256与Delphi 10.2 THashSHA2算出相同的结果
procedure TForm2.Button3Click(Sender: TObject); var hashed:string; begin hashed:=TkbmMWHashSHA256.Ha ...
- java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
偶然在群里看到有人问到大数据查询,自己也就想了小艾改如何解决,从从1000万个随机数中查找出相同的10万个随机数花的最少时间, 谈到效率,自然是hashmap莫属. import java.util. ...
- delphi 10.1 Berlin 中使用自带的 Base64 编码
delphi 10.1 berlin版本中,有好几个 base64 编码的单元可以使用,例如 Indy, MessageDigest_5,还有 CnBase64,我现在使用自带的 System.Net ...
- Delphi 10.3.1 TNetHttpClient在多线程中存在的问题及解决方法。
Delphi 10.3.1发布了,对10.3.0存在的各种问题,做了大量的修正.但听高勇说TNetHttpClient在多线程中存在问题,今天做了一下测试,确实如此,看来,还需要官方进一步修正! 具体 ...
- delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题
IOS 9 于17号早上正式开始推送,早上起来立马安装,这次升级包只有1G, 安装空间也大大降低(想起IOS 8 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐 ...
- 在指定时间干,必须干(kbmmw 中的事件调度)
从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...
- delphi 10 seattle 安卓服务开发(三)
delphi 10 里面的安卓服务有四种,上面的一篇文章里面的图有介绍. 今天做一个remote service 的例子.(里面一部分代码是抄别人的,如果不太清楚,自行恶补) remote servi ...
- kbmmw中向服务器端传递对象的一种简单方式
运行环境:delphi 10.2+kbmmw 5.6.20 在kbmmw 的老版本中,要向服务器传送一个本地的对象,一般都需要进行一些转换,例如通过序列化的方式. 在新版的kbmmw中这一切都变的很简 ...
- kbmmw 中简单返回 extjs 数据JSON
以前,我们通过自己写json 来返回数据表的内容.在delphi 10.2.2中,官方自带了一个FDBatchMoveJSONWriter1 来直接处理数据库内容.把结果推送到浏览器客户端. 今天我们 ...
随机推荐
- JEECG 集成KiSSO单点登录实现统一身份认证
JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...
- Mysql分表:Merge
merge是Mysql最简单的一种分表,Mysql自带的一个分表功能,Merge表并不保存数据,Merge表和分表是对应映射关系.demo: 创建分表:CREATE TABLE `user1` ( ` ...
- (ZT)算法杂货铺——分类算法之决策树(Decision tree)
https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分 ...
- Mysql千万级大表优化
Mysql的单张表的最大数据存储量尚没有定论,一般情况下mysql单表记录超过千万以后性能会变得很差.因此,总结一些相关的Mysql千万级大表的优化策略. 1.优化sql以及索引 1.1优化sql 1 ...
- (译)MySQL的10个基本性能技巧
原文出处:https://www.infoworld.com/article/3210905/sql/10-essential-performance-tips-for-mysql.html MySQ ...
- Servlet中清除session
HttpSession sessions = request.getSession(false);//防止创建Session if(sessions == null){ response.sendRe ...
- python 随机生成图片验证码背景RGB-浅色或者深色
import random def random_color(is_light = True): return (random.randint(0 ,127) + int(is_light) * 12 ...
- 手机访问电脑端Wampserver2.4-x64服务
我用的Wampserver2.4-x64 1. 先确保你的手机和电脑连在同一个局域网内. 2. Window + R, 然后输入 ipconfig,然后获取ip地址, 长这样: 192.168.XX. ...
- Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name
我也遇到这个问题,原因时启动docker服务时没有启动iptables服务导致的(有些docker需要再iptables开放有些端口)解决方法1.启动iptables服务 CentOS 7 以下版本 ...
- Could not HEAD 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom'.