先说下今天写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函数实现相关推荐

  1. oracle中的NVL,NVL2,NULLIF,COALESCE函数使用

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  2. Oracle学习:条件表达式及分组函数

    一.条件表达式 (1)使用 case when select empno, ename, job, sal "涨前薪水",case jobwhen 'PRESIDENT' then ...

  3. 数据安全:通过Oracle的基本函数实现简单加密脱敏函数

    注我们获得更多精彩 作者 | 苏星开,云和恩墨南区交付技术顾问,曾服务过通信.能源生产.金融等行业客户,擅长 SQL 审核和优化,DataGuard 容灾等. 概述 这里主要介绍两种操作简易的加密脱密 ...

  4. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  5. oracle有无left函数,Sql 中的 left 函数、right 函数

    DB2中left()函数和right()函数对应oracle中的substr()函数 DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LE ...

  6. MySQL——统计函数count,合计函数sum,(avg,max,min)函数

    目录 1.统计函数- count 2.合计函数-sum 3.-演示(avg,max,min)函数的使用 1.统计函数- count Count 返回行的总数 Select count( * ) I c ...

  7. Oracle SQL 行转列,pivot函数和unpivot函数

    转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...

  8. oracle的chr的使用,Oracle 学习之:ASCII,CHR函数的作用和用法

    对于ASCII以及CHR函数的用法,Oracle给出的解释是: ASCII(x)gets the ASCII value of the character X, CHR() and ASCII() h ...

  9. Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc

    1.经典的select sql语句 //注意:包含空值的数学表达式求出的结果为空值 SQL> select sal+comm from emp; //连接员工编号与员工姓名这两个字段 SQL&g ...

  10. Oracle数据二进制传输,学习笔记:Oracle数值函数 十进制与二进制相互转换的函数使用案例...

    天萃荷净 ORACLE 十进制与二进制互转函数,开发DBA向我咨询数值转换的方法,Oracle数值转换函数NUMBER_TO_BIT等函数可用 1.Oracle数值转换之十进制转换二进制 CREATE ...

最新文章

  1. 在 MyEclipse 中配置 tomcat
  2. java遍历删除原理,Java 垃圾回收机制实现原理
  3. Spring Boot中通过Accept-Language头信息设置国际化内容
  4. 算法总结之求解模线性方程组
  5. iOS_GET_网络请求
  6. js基础代码大全_关于前端业务代码的一些见解
  7. 告别码公式的痛苦,公式OCR终于来了!
  8. EDFbrowser查看edf文件及睡眠分期认识
  9. 形式化方法对软件开发的挑战:一些历史与现实
  10. Matlab|模拟电动汽车的充放电【充电顺序,波动发电,电池缓冲】
  11. 新编16 32位微型计算机答案,新编1632位微型计算机原理及应用.习题解答.ppt
  12. Guava 系列 - 比较器
  13. 数据库原理和应用(8)—— 数据类型
  14. 污染土壤修复可以采取哪些方式
  15. 5.8日 ksjsb 小黄鸟抓快手ck教程
  16. 业务建模七大关键应用场景
  17. qq,tim聊天的人太多,如何找到和自己聊过天的网友
  18. 异步与promise
  19. MySQL记录删除后竟能按中间被删除的主键加回去,磁盘空间被重用!
  20. JS设计模式(策略模式)

热门文章

  1. java闰年_编写java程序判断闰年。
  2. “神奇小子”于品海 再展零成本收购绝技
  3. 详细解析Linux /etc/shadow文件
  4. 技术岗面试中的一些常见问题
  5. 《操作系统真象还原》第三章 ---- 完善MBR 尝汇编先苦涩后甘甜而再战MBR!(内有闲聊)
  6. HDP3.1.5安装包下载地址,百度云下载
  7. postgres中的中文分词zhparser
  8. MySQL数据库完全备份与恢复
  9. ios 拍照上传到服务器_iOS 上传图片到服务器
  10. 联想g400从u盘启动计算机,联想g400怎么从u盘启动-联想g400设置u盘启动方法