Unity中模拟生成正态分布的一种方式

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;public class MathFunction : MonoBehaviour
{private void Start(){//key 范围 0-99 表示 0% 到 99%Dictionary<int,uint> m = new Dictionary<int, uint>();for (int i = 0; i < 100; i++){m[i] = 0;}//f(x)为正态函数在[0,x]区间的积分//y = f(x)函数的逆函数 x = f(y)//x 精确到 0.0000 到 0.4999 (正态函数在零到正无穷积分值为0.5000)//y 在 x = 0.4999 时 最大 y = 3.71905 指定 MAX_F 为 3.8float MAX_F = 3.8f;for (int i = 0;i < 1000000; i++){int num = UnityEngine.Random.Range(0,5000);float numR = num / 10000f;float posf = MyErfinv(numR * 2f) * Mathf.Sqrt(2f);int pos = (int)(posf / MAX_F * 100f);if (pos >= 100){pos = 99;}if (pos < 0){pos = 0;}m[pos]++;}string str = "";for(int i = 0;i < m.Count ; i++){str += "百分之"+i.ToString()+" "+m[i].ToString()+" \n";}Debug.Log(str);}// 修正的逆误差函数private float MyErfinv(float a){float p, r, t;t = MyFma(a, -a, 1.0f);t = MyLog(t);if (Mathf.Abs(t) > 6.125f){p = 3.03697567e-10f;p = MyFma(p, t, 2.93243101e-8f);p = MyFma(p, t, 1.22150334e-6f);p = MyFma(p, t, 2.84108955e-5f);p = MyFma(p, t, 3.93552968e-4f);p = MyFma(p, t, 3.02698812e-3f);p = MyFma(p, t, 4.83185798e-3f);p = MyFma(p, t, -2.64646143e-1f);p = MyFma(p, t, 8.40016484e-1f);}else{p = 5.43877832e-9f;p = MyFma(p, t, 1.43285448e-7f);p = MyFma(p, t, 1.22774793e-6f);p = MyFma(p, t, 1.12963626e-7f);p = MyFma(p, t, -5.61530760e-5f);p = MyFma(p, t, -1.47697632e-4f);p = MyFma(p, t, 2.31468678e-3f);p = MyFma(p, t, 1.15392581e-2f);p = MyFma(p, t, -2.32015476e-1f);p = MyFma(p, t, 8.86226892e-1f);}r = a * p;return r;}private float MyFma(float x, float y, float z){return x * y + z;}private float MyLog(float a){float i, m, r, s, t;int e = 0;m = Frexpf(a, ref e);if (m < 0.666666667f){m += m;e -= 1;}i = e;m -= 1.0f;s = m * m;r = -0.130310059f;t = 0.140869141f;r = MyFma(r, s, -0.121484190f);t = MyFma(t, s, 0.139814854f);r = MyFma(r, s, -0.166846052f);t = MyFma(t, s, 0.200120345f);r = MyFma(r, s, -0.249996200f);r = MyFma(t, m, r);r = MyFma(r, m, 0.333331972f);r = MyFma(r, m, -0.500000000f);r = MyFma(r, s, m);r = MyFma(i, 0.693147182f, r);return r;}private float Frexpf(float x, ref int exp){exp = 0;if (x == 0f) return 0f;float abs_x = Mathf.Abs(x);if (abs_x == float.PositiveInfinity || float.IsNaN(abs_x)){return x;}exp = (int)Mathf.Floor(Mathf.Log(abs_x, 2)) + 1;float significand = x * Mathf.Pow(2, -exp);if (Mathf.Abs(significand) >= 1f){significand *= 0.5f;exp++;}else if (Mathf.Abs(significand) < 0.5f && significand != 0f){significand *= 2f;exp--;}return significand;}
}
//随机生成 1000000 条数据
//以下单位(条)
百分之0 30440 
百分之1 30281 
百分之2 30270 
百分之3 30300 
百分之4 29800 
百分之5 29556 
百分之6 29309 
百分之7 28959 
百分之8 28904 
百分之9 28092 
百分之10 28140 
百分之11 27562 
百分之12 27298 
百分之13 26807 
百分之14 26273 
百分之15 25309 
百分之16 24687 
百分之17 24489 
百分之18 23420 
百分之19 23120 
百分之20 22205 
百分之21 21822 
百分之22 20976 
百分之23 20383 
百分之24 19481 
百分之25 19044 
百分之26 18296 
百分之27 17704 
百分之28 16825 
百分之29 16214 
百分之30 15624 
百分之31 14886 
百分之32 13952 
百分之33 13736 
百分之34 12764 
百分之35 12318 
百分之36 11692 
百分之37 10826 
百分之38 10348 
百分之39 9772 
百分之40 9130 
百分之41 8825 
百分之42 8235 
百分之43 7780 
百分之44 7179 
百分之45 6810 
百分之46 6398 
百分之47 5949 
百分之48 5318 
百分之49 5198 
百分之50 4671 
百分之51 4626 
百分之52 4023 
百分之53 3883 
百分之54 3351 
百分之55 3414 
百分之56 3003 
百分之57 2794 
百分之58 2637 
百分之59 2211 
百分之60 2303 
百分之61 2023 
百分之62 1715 
百分之63 1627 
百分之64 1640 
百分之65 1367 
百分之66 1166 
百分之67 1215 
百分之68 1008 
百分之69 762 
百分之70 996 
百分之71 635 
百分之72 822 
百分之73 608 
百分之74 583 
百分之75 397 
百分之76 407 
百分之77 391 
百分之78 386 
百分之79 405 
百分之80 192 
百分之81 209 
百分之82 226 
百分之83 205 
百分之84 210 
百分之85 201 
百分之86 206 
百分之87 0 
百分之88 184 
百分之89 0 
百分之90 207 
百分之91 0 
百分之92 0 
百分之93 194 
百分之94 0 
百分之95 0 
百分之96 0 
百分之97 191 
百分之98 0 
百分之99 0 

图像来源GPT-4

文章借鉴&引用:

Inverse Error Function in C - Stack Overflow

关于C#:精确计算比例互补误差函数erfcx() | 码农家园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路径规划中的曲线插值

路径规划中的曲线插值是一种数学方法&#xff0c;它通过一系列离散的点生成一条平滑的曲线&#xff0c;这条曲线可以用于机器人导航、自动车辆驾驶、动画制作等领域。以下是一些常见的曲线插值方法&#xff1a; 线性插值&#xff1a; 线性插值是最简单的插值方法&#xff0c;它…

Leetcode:无重复字符的最长子串

普通版本&#xff08;哈希表 滑动窗口&#xff09; 题目链接&#xff1a;3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; //方法一&#xff1a; class Solution { public:int lengthOfLongestSubstring(string s) {unordered_map<char,int> st;int …

【Linux】文件系统和软硬链接

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

Java 服务挂掉,服务器异常宕机问题排查

目录 Java 服务挂掉&#xff0c;服务器异常宕机问题排查一、初步排查1. 检查日志文件2. 查看资源使用情况 二、详细排查1. 内存问题2. CPU 问题3. 磁盘和网络 I/O 三、系统性优化和预防1. 配置监控和报警2. 优化 JVM 参数3. 代码优化 四、案例分享案例一&#xff1a;内存泄漏导…

redux相关源码

1、createStore 实现 2、connct实现 3、bindActionCreators实现 4、Provider实现 5. thunk

html+css web前端 多边形

<!DOCTYPE html><html><head><meta charset"UTF-8"><title>多边形</title><style type"text/css">#pentagon_6_1 {position: absolute;top: 0px;height: 0; width: 100; border-left: 100px solid rgb(255, 255…

【记忆化搜索 】2312. 卖木头块

本文涉及知识点 记忆化搜索 LeetCode2312. 卖木头块 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每…

网络四层、七层协议

一、OSI七层模型 物理层&#xff1a;建立、维护、断开物理连接。 数据链路层&#xff1a;逻辑连接、寻找硬件地址——地址解析协议&#xff1a;ARP、PARP 反向地址转换协议 网络层&#xff1a;寻找逻辑地址&#xff0c;实现不同网络之间的路径选择——ICMP(互联网控制信息协议…

Vue前端平台的搭建

文章目录 前端平台搭建(`Vue2.6`,App:`HBulderX`)创建`Vue2.6`项目下载相应插件方便开发路由配置对连接后端进行一些配置(`main.js`文件)导入ElementUI组件[组件 | Element](https://element.eleme.cn/#/zh-CN/component/icon)同步与异步`axios`异步请求框架前端平台搭建(Vue2.…

YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…

JVM源码探秘:System.gc全面解析

概述 Java虚拟机&#xff08;JVM&#xff09;的垃圾回收&#xff08;GC&#xff09;通常由VM自身根据预设条件触发&#xff0c;但开发者也可通过特定手段人为触发&#xff0c;比如使用System.gc()、Runtime.gc()或JMap操作等。本文将深入探讨System.gc()的底层原理及其背后的故…

windows 在cmd 使用cd命令无法进入指定目录解决方法

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用cmd命令想要快速进入某个目录&#xff0c;发现没有跳转&#xff0c;如下&#xff1a; 二、原因分析 cmd 切换目录跨磁盘的话&#xff0c;需要先进行磁盘的转换&#xff0c;也就是要进入到另外一…

使用pkg打包了一个使用了sqlite3的nodejs项目,启动后闪退

从截图来看&#xff0c;问题出在 sqlite3 模块上。说明在打包过程中&#xff0c;sqlite3 模块的 .node 文件没有正确加载。 紧急解决方法&#xff1a; 其实就是exe文件还需要node_modules中的sqlite3 依赖&#xff0c;我们直接在系统顶级放一个node_modules&#xff0c;且其中只…

linux下 搭建Llama3

安装软件&#xff1a; Ollama&#xff0c;官方网站&#xff1a;https://ollama.com/ 可以再下载win、mac和linux版本 linux安装命令为&#xff1a;curl -fsSL https://ollama.com/install.sh | sh 由于我的机器是linux不联网机器&#xff0c;网上没找到下载离线方式&#xff0c…

嵌入式测试基础知识

1.白盒测试也称为结构测试&#xff0c;主要用于检测软件编码过程中的错误。 2.黑盒测试又称为功能测试&#xff0c;主要检测软件的每一个功能是否能够正常使用。 3.软件测试流程&#xff1a;根据测试需求编写测试计划、方案&#xff0c;测试用例&#xff0c;做测试分析&#…

极简朋友圈rmoments多用户版

什么是 moments &#xff1f; moments 是仿照微信朋友圈开发的个人极简朋友圈。但目前不支持多用户。 什么是 rmoments &#xff1f; rmoments 复刻自 moments&#xff0c;除了支持全部原生功能外&#xff0c;最大的特点是支持多用户。 原版 moments 目前不支持多用户。rmoment…

✅order by 是怎么实现的?

首先排序功能由 ORDER BY 实现&#xff0c;具体排列顺序取决于优化器的选择。若优化器认为索引排序更有效率&#xff0c;则使用索引排序&#xff1b;反之&#xff0c;则使用 filesort&#xff08;执行计划中额外信息提示&#xff1a;使用 filesort&#xff09;。然而&#xff0…

如何制定精益生产团队的目标和考核机制?

当下&#xff0c;精益生产已经成为企业追求高效运营和持续竞争优势的重要策略。而要实现精益生产的最大化效益&#xff0c;制定科学合理的团队目标与考核机制显得尤为重要。本文&#xff0c;深圳天行健企业管理咨询公司将分享如何制定精益生产团队的目标和考核机制&#xff0c;…

Java交换map的key和value值

在Java中&#xff0c;我们都知道直接交换Map的key和value是不被允许的&#xff0c;因为Map的接口设计是基于key-value对的&#xff0c;其中key是唯一的&#xff0c;并且是不可变的&#xff08;在HashMap等常见的实现中&#xff0c;虽然key的引用是不可变的&#xff0c;但key对象…

【Test 19】 数据结构 快速排序详解!

文章目录 1. 快速排序的非递归版本2. 快速排序2.1 hoare 版本一2.2 挖坑法 &#x1f427;版本二2.3 前后指针 版本三2.4 调用以上的三个版本的快排 3. 快速排序的优化 1. 快速排序的非递归版本 &#x1f192;&#x1f427;关键思路&#xff1a; &#x1f34e;① 参数中的begin…