C#,数值计算——多项式微分(Binomial Deviates)的计算方法与源程序

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// 二项式偏差
    /// Binomial Deviates
    /// </summary>
    public class Binomialdev : Ran
    {
        private double pp { get; set; }
        private double p { get; set; }
        private double pb { get; set; }
        private double expnp { get; set; }
        private double np { get; set; }
        private double glnp { get; set; }
        private double plog { get; set; }
        private double pclog { get; set; }
        private double sq { get; set; }
        private int n { get; set; }
        private int swch { get; set; }
        private ulong uz { get; set; }
        private ulong uo { get; set; }
        private ulong unfin { get; set; }
        private ulong diff { get; set; }
        private ulong rltp { get; set; }
        private int[] pbits { get; set; } = new int[5];
        private double[] cdf { get; set; } = new double[64];
        private double[] logfact { get; set; } = new double[1024];

        public Binomialdev(int nn, double ppp, ulong i) : base(i)
        {
            this.pp = ppp;
            this.n = nn;
            pb = p = (pp <= 0.5 ? pp : 1.0 - pp);
            if (n <= 64)
            {
                uz = 0;
                uo = 0xffffffffffffffffL;
                rltp = 0;
                for (int j = 0; j < 5; j++)
                {
                    pbits[j] = 1 & ((int)(pb *= 2.0));
                }
                pb -= Math.Floor(pb);
                swch = 0;
            }
            else if (n * p < 30.0)
            {
                cdf[0] = Math.Exp(n * Math.Log(1 - p));
                for (int j = 1; j < 64; j++)
                {
                    cdf[j] = cdf[j - 1] + Math.Exp(Globals.gammln(n + 1.0) - Globals.gammln(j + 1.0) - Globals.gammln(n - j + 1.0) + j * Math.Log(p) + (n - j) * Math.Log(1.0 - p));
                }
                swch = 1;
            }
            else
            {
                np = n * p;
                glnp = Globals.gammln(n + 1.0);
                plog = Math.Log(p);
                pclog = Math.Log(1.0 - p);
                sq = Math.Sqrt(np * (1.0 - p));
                if (n < 1024)
                {
                    for (int j = 0; j <= n; j++)
                    {
                        logfact[j] = Globals.gammln(j + 1.0);
                    }
                }
                swch = 2;
            }
        }

        public int dev()
        {
            int k;
            if (swch == 0)
            {
                unfin = uo;
                for (int j = 0; j < 5; j++)
                {
                    diff = unfin & (int64() ^ (pbits[j] > 0 ? uo : uz));
                    if (pbits[j] > 0)
                    {
                        rltp |= diff;
                    }
                    else
                    {
                        rltp = rltp & ~diff;
                    }
                    unfin = unfin & ~diff;
                }
                k = 0;
                for (int j = 0; j < n; j++)
                {
                    if ((unfin & 1) > 0)
                    {
                        if (doub() < pb)
                        {
                            ++k;
                        }
                    }
                    else
                    {
                        if ((rltp & 1) > 0)
                        {
                            ++k;
                        }
                    }
                    unfin >>= 1;
                    rltp >>= 1;
                }
            }
            else if (swch == 1)
            {
                double y = doub();
                int kl = -1;
                k = 64;
                while (k - kl > 1)
                {
                    int km = (kl + k) / 2;
                    if (y < cdf[km])
                    {
                        k = km;
                    }
                    else
                    {
                        kl = km;
                    }
                }
            }
            else
            {
                for (; ; )
                {
                    double u = 0.645 * doub();
                    double v = -0.63 + 1.25 * doub();
                    double v2 = Globals.SQR(v);
                    if (v >= 0.0)
                    {
                        if (v2 > 6.5 * u * (0.645 - u) * (u + 0.2))
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (v2 > 8.4 * u * (0.645 - u) * (u + 0.1))
                        {
                            continue;
                        }
                    }
                    k = (int)(Math.Floor(sq * (v / u) + np + 0.5));
                    if (k < 0 || k > n)
                    {
                        continue;
                    }
                    double u2 = Globals.SQR(u);
                    if (v >= 0.0)
                    {
                        if (v2 < 12.25 * u2 * (0.615 - u) * (0.92 - u))
                        {
                            break;
                        }
                    }
                    else
                    {
                        if (v2 < 7.84 * u2 * (0.615 - u) * (1.2 - u))
                        {
                            break;
                        }
                    }
                    double b = sq * Math.Exp(glnp + k * plog + (n - k) * pclog - (n < 1024 ? logfact[k] + logfact[n - k] : Globals.gammln(k + 1.0) + Globals.gammln(n - k + 1.0)));
                    if (u2 < b)
                    {
                        break;
                    }
                }
            }
            if (p != pp)
            {
                k = n - k;
            }
            return k;
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// 二项式偏差/// Binomial Deviates/// </summary>public class Binomialdev : Ran{private double pp { get; set; }private double p { get; set; }private double pb { get; set; }private double expnp { get; set; }private double np { get; set; }private double glnp { get; set; }private double plog { get; set; }private double pclog { get; set; }private double sq { get; set; }private int n { get; set; }private int swch { get; set; }private ulong uz { get; set; }private ulong uo { get; set; }private ulong unfin { get; set; }private ulong diff { get; set; }private ulong rltp { get; set; }private int[] pbits { get; set; } = new int[5];private double[] cdf { get; set; } = new double[64];private double[] logfact { get; set; } = new double[1024];public Binomialdev(int nn, double ppp, ulong i) : base(i){this.pp = ppp;this.n = nn;pb = p = (pp <= 0.5 ? pp : 1.0 - pp);if (n <= 64){uz = 0;uo = 0xffffffffffffffffL;rltp = 0;for (int j = 0; j < 5; j++){pbits[j] = 1 & ((int)(pb *= 2.0));}pb -= Math.Floor(pb);swch = 0;}else if (n * p < 30.0){cdf[0] = Math.Exp(n * Math.Log(1 - p));for (int j = 1; j < 64; j++){cdf[j] = cdf[j - 1] + Math.Exp(Globals.gammln(n + 1.0) - Globals.gammln(j + 1.0) - Globals.gammln(n - j + 1.0) + j * Math.Log(p) + (n - j) * Math.Log(1.0 - p));}swch = 1;}else{np = n * p;glnp = Globals.gammln(n + 1.0);plog = Math.Log(p);pclog = Math.Log(1.0 - p);sq = Math.Sqrt(np * (1.0 - p));if (n < 1024){for (int j = 0; j <= n; j++){logfact[j] = Globals.gammln(j + 1.0);}}swch = 2;}}public int dev(){int k;if (swch == 0){unfin = uo;for (int j = 0; j < 5; j++){diff = unfin & (int64() ^ (pbits[j] > 0 ? uo : uz));if (pbits[j] > 0){rltp |= diff;}else{rltp = rltp & ~diff;}unfin = unfin & ~diff;}k = 0;for (int j = 0; j < n; j++){if ((unfin & 1) > 0){if (doub() < pb){++k;}}else{if ((rltp & 1) > 0){++k;}}unfin >>= 1;rltp >>= 1;}}else if (swch == 1){double y = doub();int kl = -1;k = 64;while (k - kl > 1){int km = (kl + k) / 2;if (y < cdf[km]){k = km;}else{kl = km;}}}else{for (; ; ){double u = 0.645 * doub();double v = -0.63 + 1.25 * doub();double v2 = Globals.SQR(v);if (v >= 0.0){if (v2 > 6.5 * u * (0.645 - u) * (u + 0.2)){continue;}}else{if (v2 > 8.4 * u * (0.645 - u) * (u + 0.1)){continue;}}k = (int)(Math.Floor(sq * (v / u) + np + 0.5));if (k < 0 || k > n){continue;}double u2 = Globals.SQR(u);if (v >= 0.0){if (v2 < 12.25 * u2 * (0.615 - u) * (0.92 - u)){break;}}else{if (v2 < 7.84 * u2 * (0.615 - u) * (1.2 - u)){break;}}double b = sq * Math.Exp(glnp + k * plog + (n - k) * pclog - (n < 1024 ? logfact[k] + logfact[n - k] : Globals.gammln(k + 1.0) + Globals.gammln(n - k + 1.0)));if (u2 < b){break;}}}if (p != pp){k = n - k;}return k;}}
}

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

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

相关文章

docker 安装 Node-RED

Node-RED 是构建物联网应用程序的一个强大工具&#xff0c;使用可视化编程方法&#xff0c;连接起来执行任务。而homeassistant是家居智慧中枢&#xff0c;本文介绍如何安装Node-RED及HASS的插件 1、拉取镜像 docker pull nodered/node-red # 2、部署镜像 创建目录 mkidr -…

状态管理Pinia

Vue3 状态管理 - Pinia 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到Vue项目 后面在实际开发项目的时候&#xff0c;Pinia可以在项目创建时自动添加&#xff0c;现在我们初次学习&#xff0c;从零开始…

D. Choosing Capital for Treeland

Problem - 219D - Codeforces 问题描述&#xff1a;Treeland国有 n 个城市, 这 n 个城市连接成了一棵树, 靠单向道路相连, 现在政府想要选择一个城市作为首都, 条件是首都必须能到达其他所有城市, 现在我们不得不将一些道路反转方向, 记反转的条数为 k 条, 我们要找到所有使 k…

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION (论文解析)

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 摘要1 介绍2 相关工作3 重新审视 Transformers 和 DETR4 方法4.1 用于端到端目标检测的可变形transformer4.2 Deformable Detr的其他改进和变型5 实验5.1 和DETR 比较5.2 消融实验5.3 与最先进方法的…

构建知识库:一文解决跨平台科研文献及笔记同步问题

文章目录 需求及目标现有方案调研文献管理方案云存储方案Markdown编辑器Windows端Ipad端 图床管理方案 最终方案操作流程最后 作为一个十级懒人&#xff0c;要么躺着要么在探寻提效工具的路上。 开始打工生涯之后&#xff0c;除了正常工作时间&#xff0c;总想利用业余时间提升…

vscode调试程序设置

主要设置和json内容如下&#xff1a; cpp_properties.json内容&#xff1a; {"configurations": [ //C intellisense插件需要这个文件&#xff0c;主要是用于函数变量等符号的只能解析{"name": "Win32","includePath": ["${work…

【IC设计】Chisel开发环境搭建

首先安装一个Ubuntu的虚拟机 然后给Ubuntu换个镜像&#xff0c;方便下载 注意换源后使用apt-get update更新下 安装vim&#xff08;可以不做&#xff09; 这里安装Vim是我感觉Ubuntu自带的vi编辑器似乎有问题&#xff0c;因为我按i进入【插入模式】并没有提示&#xff0c;所以…

Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标…

离子风蛇有什么作用?

离子风蛇的工作原理是通过内置的高压发生器升至高压电晕空气生成正负离子&#xff0c;再随风流覆盖至物体表面&#xff0c;从而中和其所带的正负静电电荷&#xff0c;这是一种用在工厂里面的工业设备&#xff0c;主要的作用是用来消除静电&#xff0c;其次还可以达到除尘和杀菌…

计算机专业毕业设计项目推荐01-生产管理系统(JavaSpringBoot+原生Js+Mysql)

生产管理系统&#xff08;JavaSpringBoot原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以…

数据库原理及应用(MySQL)

建议大屏观看&#xff0c;避免格式错误&#xff0c;影响观感 目录 第一章 数据库系统概述 1.数据库系统概述 1.1.信息 1.2.数据 1.3.信息和数据之间的联系 1.4.数据库&#xff08;DB&#xff09; 1.5.数据库管理系统&#xff08;DBMS&#xff09; 1.6.数据库管理系统的…

Java多线程(一)多线程概要

多线程概要 多线程概要 什么是进程&#xff1f; 进程的特点&#xff1a; 什么是多线程 多线程编程&#xff1a; 创建线程 1.继承 Thread 类 2.实现 Runnable 接口 多线程的优势 中断问题&#xff1a; 1. 通过共享的标记来进行沟通 2. 调用 interrupt() 方法来通知 …

Python散点图

散点图 散点图是指在回归分析中&#xff0c;数据点在直角坐标系平面上的分布图&#xff0c;散点图表示因变量随自变量而变化的大致趋势&#xff0c;据此可以选择合适的函数对数据点进行拟合。用两组数据构成多个坐标点&#xff0c;考察坐标点的分布&#xff0c;判断两变量之间…

显示器鼠标滚动时或者拖拽文字变为绿色

新电脑&#xff0c;新显示器&#xff0c;看文章时滚动鼠标滑轮&#xff0c;文字颜色就变为绿色。 拖住文本文档或者浏览器等有文字的窗口&#xff0c;文字也会变为绿色。 静止时一点儿问题没有。 以下视频展示滚动和拖拽的操作&#xff0c;视频看不出变色&#xff0c;只参考…

科技云报道:AI时代,对构建云安全提出了哪些新要求?

科技云报道原创。 随着企业上云的提速&#xff0c;一系列云安全问题也逐渐暴露出来&#xff0c;云安全问题得到重视&#xff0c;市场不断扩大。 Gartner 发布“2022 年中国 ICT 技术成熟度曲线”显示&#xff0c;云安全已处于技术萌芽期高点&#xff0c;预期在2-5年内有望达到…

AOI软件之 CAD图纸导入功能

在这里&#xff0c;我不过多的解释AOI&#xff0c;半导体检测行业内的小伙伴自然会懂&#xff1b;我也不会过多解释何为diemap或者wafer-layout。因为我们本文的核心场景仅仅是cad图纸的解析和基本绘图的二次开发。而且我们紧紧是面向行业内的场景需求来说明此功能。 无图我说…

【Kafka】Kafka再平衡机制及相关参数

背景 Kafka作为一款基于发布订阅模式的消息队列&#xff0c;生产者将消息发送到Kafka集群&#xff08;Brokers&#xff09;中&#xff0c;消费者&#xff08;Consumer Group &#xff09;拉取消息进行消费&#xff0c;实现了异步机制。Kafka中&#xff0c;消费者通常以消费者组…

【Sentinel】ProcessorSlotChain处理器插槽链与Node

文章目录 1、Sentinel的基本概念2、ProcessorSlotChain3、Node 1、Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09;规则判断…

Redis高并发分布式锁实战

高并发场景秒杀抢购超卖bug实战重现 秒杀抢购场景下实战JVM级别锁与分布式锁 大厂分布式锁Resisson框架实战 Lua脚本语言快速入门与使用注意事项 Redisson分布式锁源码剖析 Redis主从架构锁失效问题解析 从CAP角度剖析Redis与Zookeeper分布式锁区别 Redlock分布式锁原理与…

Qt QTreeWidge解决setItemWidget后,导致复选框失效

一、问题&#xff1a; QTreeWidget某一项加上itemWidget后&#xff0c;导致复选框失效问题 二、解决方法 将要加上的widget控件加到该项的后续的列&#xff0c;即控件跟复选框不同一列 三、具体代码 QTreeWidget* treeW new QTreeWidget; treeW->setColumnCount(2); /…