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.8
        float 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() | 码农家园

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS绘制圆弧

css绘制如图的圆弧&#xff1a; 这种矩形弧形的效果中&#xff0c;弧形的效果一般是由一条曲线拉伸出来的&#xff0c;这条曲线往往是属于一个椭圆的&#xff0c;所以可以绘制一个椭圆&#xff0c;截取部分可视区域实现效果。 <style> .wrapper{width: 400px;height: 60…

Hive原理及、部署和以及使用(超详细)

Hive的安装配置、初始化元数据、启动 1、解压hive到指定目录/usr/local/src 改名&#xff0c;将mysql的驱动包拷贝到hive的lib目录下 2、环境变量 1&#xff09; vi /etc/profile export HIVE_HOME/usr/local/src/hive export PATH P A T H : PATH: PATH:HIVE_HOME/bin echo…

20 厂商文档学习资料查询

01 厂商介绍 新华三&#xff08;H3C&#xff09; 新华三是一家专注于IT基础设施产品和解决方案的公司&#xff0c;提供从网络设备到数据中心解决方案的全套服务。它是中国领先的网络解决方案供应商之一&#xff0c;业务涵盖企业网、数据中心、云计算等多个领域。 华为&#x…

Java排序算法汇总篇,八种排序算法

排序算法汇总: Java排序算法(一)&#xff1a;冒泡排序 Java排序算法(二)&#xff1a;选择排序 Java排序算法(三)&#xff1a;插入排序 Java排序算法(四)&#xff1a;快速排序 Java排序算法(五)&#xff1a;归并排序 Java排序算法(六)&#xff1a;希尔排序 Java排序算法(…

科普之旅 | 什么是大语言模型

作者&#xff1a;陈之炎本文约2000字&#xff0c;建议阅读5分钟 本文介绍了大语言模型。 导读 在这个信息爆炸的时代&#xff0c;你是否曾幻想过与机器流畅交谈&#xff0c;或是让AI助你笔下生花&#xff0c;创作出惊艳的文章&#xff1f;这一切&#xff0c;都离不开大语言模型…

港口利器:ModbusTCP转CAN轻松连接,提升跨运车效率!

BXKJ系列嵌入式通信模块&#xff0c;宛如一把神奇的钥匙&#xff0c;打开了与特定工业网络沟通的神秘之门。这些模块的可互换性&#xff0c;赋予了用户自由连接至任何所需网络的无限可能。它们与众多主流现场总线和工业以太网网络无缝对接&#xff0c;包括但不限于Profibus、De…

matlab(实例):滤波器(低通、带通、高通,使用butter函数、filter函数)

一、题目&#xff1a;已知一个时域信号&#xff0c;包含三个频率&#xff08;50Hz、150Hz、300Hz&#xff09;&#xff0c;分别设计并使用低通滤波器、带通滤波器、高通滤波器&#xff0c;对其进行滤波&#xff0c;画出滤波信号的时域图和频谱图。 二、解题过程&#xff1a; ①…

孩子用的灯什么样的好?安利几款适合孩子用的护眼台灯

随着学生们重返校园&#xff0c;家长和孩子们忙于新学期的准备工作&#xff0c;眼睛健康的考量自然也在其中。这也是为何近年来护眼台灯越来越受到欢迎的原因之一。作为一个长期近视并且日常用眼时间较长的人&#xff0c;我本人对护眼台灯有着长期的使用经历&#xff0c;并对它…

halcon程序如何导出C#文件

1.打开halcon文件&#xff1b; 2.写好需要生成C#文件的算子或函数&#xff1b; 3.找到档案-输出&#xff0c;如下图&#xff1b; 4.点击输出&#xff0c;弹出如下窗口 &#xff08;1&#xff09;可以修改导出文件的存储路径 &#xff08;2&#xff09;选择C#-HALCON/.NET &…

window11 设置 ubuntu2204 至最佳体验(安装/右键菜单/root用户/docker)

前言 在 window 中如果不使用 ubuntu 命令行会非常不方便&#xff0c;还好微软提供了 ubuntu 的终端&#xff0c;下载安装后简单设置下就可以愉快的使用了。 本文会涉及的方面 安装右键菜单设置root 用户设置docker 设置 安装 ubuntu 到微软的软件商店中下载安装即可&…

AndroidFlutter混合开发

为什么要有混合开发 我们知道&#xff0c;Flutter是可以做跨平台开发的&#xff0c;即一份Flutter的Dart代码&#xff0c;可以编译到多个平台上运行。这么做的好处就是&#xff0c;在不降低多少性能的情况下&#xff0c;尽最大可能的节省开发的时间成本&#xff0c;直接将开发…

【OrangePi AIpro】香橙派 AIpro 解锁开发新潜能

目录 引言 一、开箱初印象 二、硬件配置概览 三、软件环境搭建 网络配置【VScode】安装配置、插件及远程SSH连接SSH 访问 OrangePi AIpro配置 vim安装外设开发库 四、实战项目体验 USB 摄像头测试1、使用 fswebcam 测试 USB 摄像头2、使用 mjpg-streamer 测试 USB 摄像头&a…

Microsoft Outlook Lite 引入短信功能

随着科技的不断进步&#xff0c;我们的沟通方式也在不断演变。微软最新推出的 Outlook Lite 应用&#xff0c;不仅为我们提供了一个轻量级的电子邮件管理工具&#xff0c;现在更是带来了一项令人兴奋的新功能——短信服务。 Outlook Lite&#xff1a;轻量级&#xff0c;功能全…

WiFi模块网络配置基本设置

WiFi模块网络如何配置&#xff1f;WiFi模块网络配置基本设置如下&#xff1a;   1、网络配置与AT命令   请求串口或其他交互接口输入SSID或密码。   虽然通过串口AT命令配置网络很简单&#xff0c;但是需要串口输入&#xff0c;一般需要在单片机系统上提供一个人机交互接…

打工人福音⚡:公牛充电交互协议,建议收藏!

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 协议原文件下载地址&#xff1a; 链接: https://pan.baidu.com/s/1kW15Nfe9cjPDFLGPYJ-zUg?pwdagq2 提取码: agq2 1 总则 1.1 协议概述 本协议适用于公司所有充电产品包括交直流充电桩、…

vueRouter路由总结

https://blog.csdn.net/qq_24767091/article/details/119326884

CUDA学习(2)

什么是CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;统一计算设备架构&#xff0c;英伟达推出的基于其GPU的通用高性能计算平台和编程模型。 借助CUDA&#xff0c;开发者可以充分利用英伟达GPU的强大计算能力加速各种计算任务。 软件生…

MathType软件2024最新简体中文汉化版本下载

在数字化时代背景下&#xff0c;教育与科研领域正经历着深刻的变革。随着在线教育和远程工作的兴起&#xff0c;数学作为基础学科之一&#xff0c;其内容的高效、精准编辑和呈现变得尤为重要。MathType软件应运而生&#xff0c;以其强大的数学公式编辑器功能&#xff0c;广泛应…

校园疫情防控|基于SprinBoot+vue的校园疫情防控系统(源码+数据库+文档)

校园疫情防控系统 目录 基于SprinBootvue的校园疫情防控系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能 5.2.2学生功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#x…

基于单片机的汽车防盗报警系统设计与实现

摘要&#xff1a; 为了有效保护车辆&#xff0c;防止车辆被盗&#xff0c;汽车防盗报警系统的设计成为研究的热点问题 。 基于 STC89C52 单片机设计了一套汽车防盗报警系统&#xff0c;该系统由硬件和软件两部分组成&#xff0c;通过高效集成电路形成完整的控制系统&#xff…