oracle normsinv函数,统计函数NormSDist和NormSInv函数实现
先说下今天写VBA学到的,那就是Excel的统计工作表函数。
Excel的统计工作表函数用于对数据区域进行统计分析。例如,统计工作表函数可以用来统计样本的方差、数据区间的频率分布等。是不是觉得好像是很专业范畴的东西?是的,统计工作表函数中提供了很多属于统计学范畴的函数,但也有些函数其实在你我的日常生活中是很常用的,比如求班级平均成绩,排名等。
但是我的程序是要cpp实现上面俩个函数,可是cpp没有这样的统计函数。查了好多资料,找到了多项式近似的方法:/***************************************************************/
/* 返回标准正态分布的累积函数,该分布的平均值为 0,标准偏差为 1。 */
/***************************************************************/double NormSDist(const double z)
{
// this guards against overflow
if(z > 6) return 1;
if(z < -6) return 0;
static const double gamma = 0.231641900,
a1 = 0.319381530,
a2 = -0.356563782,
a3 = 1.781477973,
a4 = -1.821255978,
a5 = 1.330274429;
double k = 1.0 / (1 + fabs(z) * gamma);
double n = k * (a1 + k * (a2 + k * (a3 + k * (a4 + k * a5))));
n = 1 - Normal(z) * n;
if(z < 0)
return 1.0 - n;
return n;
}/***************************************************************/
/* 返回标准正态分布累积函数的逆函数。该分布的平均值为 0,标准偏差为 1。 */
/***************************************************************/double normsinv(const double p)
{
static const double LOW = 0.02425;
static const double HIGH = 0.97575;
/* Coefficients in rational approximations. */
static const double a[] =
{
-3.969683028665376e+01,
2.209460984245205e+02,
-2.759285104469687e+02,
1.383577518672690e+02,
-3.066479806614716e+01,
2.506628277459239e+00
};
static const double b[] =
{
-5.447609879822406e+01,
1.615858368580409e+02,
-1.556989798598866e+02,
6.680131188771972e+01,
-1.328068155288572e+01
};
static const double c[] =
{
-7.784894002430293e-03,
-3.223964580411365e-01,
-2.400758277161838e+00,
-2.549732539343734e+00,
4.374664141464968e+00,
2.938163982698783e+00
};
static const double d[] =
{
7.784695709041462e-03,
3.224671290700398e-01,
2.445134137142996e+00,
3.754408661907416e+00
};
double q, r;
errno = 0;
if (p < 0 || p > 1)
{
errno = EDOM;
return 0.0;
}
else if (p == 0)
{
errno = ERANGE;
return -HUGE_VAL /* minus "infinity" */;
}
else if (p == 1)
{
errno = ERANGE;
return HUGE_VAL /* "infinity" */;
}
else if (p < LOW)
{
/* Rational approximation for lower region */
q = sqrt(-2*log(p));
return (((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) /
((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1);
}
else if (p > HIGH)
{
/* Rational approximation for upper region */
q = sqrt(-2*log(1-p));
return -(((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) /
((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1);
}
else
{
/* Rational approximation for central region */
q = p - 0.5;
r = q*q;
return (((((a[0]*r+a[1])*r+a[2])*r+a[3])*r+a[4])*r+a[5])*q /
(((((b[0]*r+b[1])*r+b[2])*r+b[3])*r+b[4])*r+1);
}
}
posted on 2007-03-13 20:52 Dain 阅读(3439) 评论(4) 编辑 收藏 引用 所属分类: Computational Finance 、程序
oracle normsinv函数,统计函数NormSDist和NormSInv函数实现相关推荐
- oracle中的NVL,NVL2,NULLIF,COALESCE函数使用
Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...
- Oracle学习:条件表达式及分组函数
一.条件表达式 (1)使用 case when select empno, ename, job, sal "涨前薪水",case jobwhen 'PRESIDENT' then ...
- 数据安全:通过Oracle的基本函数实现简单加密脱敏函数
注我们获得更多精彩 作者 | 苏星开,云和恩墨南区交付技术顾问,曾服务过通信.能源生产.金融等行业客户,擅长 SQL 审核和优化,DataGuard 容灾等. 概述 这里主要介绍两种操作简易的加密脱密 ...
- oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解
Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...
- oracle有无left函数,Sql 中的 left 函数、right 函数
DB2中left()函数和right()函数对应oracle中的substr()函数 DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LE ...
- MySQL——统计函数count,合计函数sum,(avg,max,min)函数
目录 1.统计函数- count 2.合计函数-sum 3.-演示(avg,max,min)函数的使用 1.统计函数- count Count 返回行的总数 Select count( * ) I c ...
- Oracle SQL 行转列,pivot函数和unpivot函数
转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...
- oracle的chr的使用,Oracle 学习之:ASCII,CHR函数的作用和用法
对于ASCII以及CHR函数的用法,Oracle给出的解释是: ASCII(x)gets the ASCII value of the character X, CHR() and ASCII() h ...
- Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc
1.经典的select sql语句 //注意:包含空值的数学表达式求出的结果为空值 SQL> select sal+comm from emp; //连接员工编号与员工姓名这两个字段 SQL&g ...
- Oracle数据二进制传输,学习笔记:Oracle数值函数 十进制与二进制相互转换的函数使用案例...
天萃荷净 ORACLE 十进制与二进制互转函数,开发DBA向我咨询数值转换的方法,Oracle数值转换函数NUMBER_TO_BIT等函数可用 1.Oracle数值转换之十进制转换二进制 CREATE ...
最新文章
- 在 MyEclipse 中配置 tomcat
- java遍历删除原理,Java 垃圾回收机制实现原理
- Spring Boot中通过Accept-Language头信息设置国际化内容
- 算法总结之求解模线性方程组
- iOS_GET_网络请求
- js基础代码大全_关于前端业务代码的一些见解
- 告别码公式的痛苦,公式OCR终于来了!
- EDFbrowser查看edf文件及睡眠分期认识
- 形式化方法对软件开发的挑战:一些历史与现实
- Matlab|模拟电动汽车的充放电【充电顺序,波动发电,电池缓冲】
- 新编16 32位微型计算机答案,新编1632位微型计算机原理及应用.习题解答.ppt
- Guava 系列 - 比较器
- 数据库原理和应用(8)—— 数据类型
- 污染土壤修复可以采取哪些方式
- 5.8日 ksjsb 小黄鸟抓快手ck教程
- 业务建模七大关键应用场景
- qq,tim聊天的人太多,如何找到和自己聊过天的网友
- 异步与promise
- MySQL记录删除后竟能按中间被删除的主键加回去,磁盘空间被重用!
- JS设计模式(策略模式)
热门文章
- java闰年_编写java程序判断闰年。
- “神奇小子”于品海 再展零成本收购绝技
- 详细解析Linux /etc/shadow文件
- 技术岗面试中的一些常见问题
- 《操作系统真象还原》第三章 ---- 完善MBR 尝汇编先苦涩后甘甜而再战MBR!(内有闲聊)
- HDP3.1.5安装包下载地址,百度云下载
- postgres中的中文分词zhparser
- MySQL数据库完全备份与恢复
- ios 拍照上传到服务器_iOS 上传图片到服务器
- 联想g400从u盘启动计算机,联想g400怎么从u盘启动-联想g400设置u盘启动方法