正态分布随机数算法 (php实现)
正态分布,即Normal Distribution,又名高斯分布,对应的高斯方程在http://en.wikipedia.org/wiki/Gaussian_function。
本算法主要参考:http://en.wikipedia.org/wiki/Box-Muller_transform,使用PHP实现的。
<?php /* * 使用Box-Mueller方法,生成正态分布随机数。 * * @desc 使用Box-Mueller方法,生成正态分布随机数。 * @return float 随机数 */ function normalRand() { static $last = FALSE; static $useLast = FALSE; static $n; if ($last) { $last = FALSE; $m = $n; } else { do { // 以下为Box-Mueller方法 $range = 10000000; $u = mt_rand(1, $range) / $range; $v = mt_rand(1, $range) / $range; $s = sqrt(-2 * log($u)); $x = $s * sin(2 * M_PI * $v); $y = $s * cos(2 * M_PI * $v); // 以下为封装 $width = 1.0; // 分布的宽度。 $step = 3.0; // 分布的锋锐程度。数字越小,曲线越平。 $m = $x / ($step * $width * 2.0) + $width / 2.0; $n = $y / ($step * $width * 2.0) + $width / 2.0; if($m < $width && $m > 0 && $n < $width && $n > 0) { $useLast = TRUE; } } while(!$useLast); } return $m; }
测试代码:
$all = array(); foreach(range(0,10) as $key) { $all[$key] = 0; } for($i = 0; $i < 10000; $i++) { $n = round(normalRand() * 10); $all[$n] ++; } foreach($all as $key=>$value) { echo "$key, $value \n"; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架