本文转至http://blog.sina.com.cn/s/blog_976ba8a501010vvf.html

这个单元包含高性能的算术、三角、对数、统计和金融方面的计算及FPU程序函数用于补充Delphi语言System.pas 单元中的数学常规程序函数
注意
1) 对于有些函数,这个单元中涉及的概念或常数由Earl F. Glynn (www.efg2.com) 和 Ray Lischner (www.tempest-sw.com)提供。
2) 所有的角度参数三角函数的结果都用弧度表示
3) 下列大部分的三角和对数程序直接的映射到Intel 80387 FPU
4) 浮点机指令、输入域、输出范围和错误处理主要由 FPU 硬件决定
5) 汇编程序中的代码支持Pentium FPU 管线体系
 常数
IEEE 浮点类型的范围, 包括非正规的
1) MinSingle = 1.5e-45; 最小Single数
2) MaxSingle = 3.4e+38; 最大Single数
3) MinDouble = 5.0e-324; 最小Double数
4) MaxDouble = 1.7e+308; 最大Double数
5) MinExtended = 3.4e-4932; 最小Extended数
6) MaxExtended = 1.1e+4932; 最大Extended数
7) MinComp = -9.223372036854775807e+18; 最小Comp数
8) MaxComp = 9.223372036854775807e+18; 最大Comp数

下列常数不应当被用于比较关系,仅仅用于分配。若要用于比较关系请使用IsNan 和 IsInfinity 函数。(已提供在后面)
9) NaN = 0.0 / 0.0; 非数 (*$EXTERNALSYM NaN*) (*$HPPEMIT 'static const Extended NaN = 0.0 / 0.0;'*)
10) Infinity = 1.0 / 0.0; 正无穷大 (*$EXTERNALSYM Infinity*) (*$HPPEMIT 'static const Extended Infinity = 1.0 / 0.0;'*)
11) NegInfinity = -1.0 / 0.0; 负无穷大 (*$EXTERNALSYM NegInfinity*) (*$HPPEMIT 'static const Extended NegInfinity = -1.0 / 0.0;'*)
一、 三角函数
1) 函数 ArcCos(const X: Extended): Extended; ( IN: |X| <= 1 OUT: [0..PI] 弧度)
2) 函数 ArcSin(const X: Extended): Extended; (IN: |X| <= 1 OUT: [-PI/2..PI/2] 弧度)
3) 函数 ArcTan2(const Y, X: Extended): Extended; IN: |Y| < 2^64, |X| < 2^64, X <> 0 OUT: [-PI..PI] 弧度)。计算 ArcTan(Y/X), 并且返回一个正确象限内的角度
4) 过程 SinCos(const Theta: Extended; var Sin, Cos: Extended) register;
SinCos:比分别调用Sin 和Cos 计算同一个角度快两倍
5) 函数 Tan(const X: Extended): Extended;
6) 函数 Cotan(const X: Extended): Extended; { 1 / tan(X), X <> 0 }
7) 函数 Secant(const X: Extended): Extended; { 1 / cos(X) }
8) 函数 Cosecant(const X: Extended): Extended; { 1 / sin(X) }
9) 函数 Hypot(const X, Y: Extended): Extended; { Sqrt(X**2 + Y**2) }
二、 角度单位换算程序
1) 函数 RadToDeg(const Radians: Extended): Extended; { 度数:= 弧度 * 180 / PI }
2) 函数 RadToGrad(const Radians: Extended): Extended; { 梯度:= 弧度 * 200 / PI }
3) 函数 RadToCycle(const Radians: Extended): Extended;{ 圆周:= 弧度 / 2PI }
4) 函数DegToRad(const Degrees: Extended): Extended; {弧度:= 度数* PI / 180}
5) 函数DegToGrad(const Degrees: Extended): Extended;
6) 函数DegToCycle(const Degrees: Extended): Extended;
7) 函数GradToRad(const Grads: Extended): Extended; {弧度:= 梯度 * PI / 200 }
8) 函数GradToDeg(const Grads: Extended): Extended;
9) 函数GradToCycle(const Grads: Extended): Extended;
10) 函数CycleToRad(const Cycles: Extended): Extended; {弧度:= 圆周* 2PI }
11) 函数CycleToDeg(const Cycles: Extended): Extended;
12) 函数CycleToGrad(const Cycles: Extended): Extended;
三、 双曲线函数
1) 弧度 Cot(const X: Extended): Extended; { 别名为 Cotan }
2) 函数 Sec(const X: Extended): Extended; { 别名为 Secant }
3) 函数 Csc(const X: Extended): Extended; { 别名为 Cosecant }
4) 函数 Cosh(const X: Extended): Extended;
5) 函数 Sinh(const X: Extended): Extended;
6) 函数 Tanh(const X: Extended): Extended;
7) 函数 CotH(const X: Extended): Extended;
8) 函数 SecH(const X: Extended): Extended;
9) 函数 CscH(const X: Extended): Extended;
10) 函数 ArcCot(const X: Extended): Extended; { IN: X <> 0 }
11) 函数 ArcSec(const X: Extended): Extended; { IN: X <> 0 }
12) 函数 ArcCsc(const X: Extended): Extended; { IN: X <> 0 }
13) 函数 ArcCosh(const X: Extended): Extended; { IN: X >= 1 }
14) 函数 ArcSinh(const X: Extended): Extended;
15) 函数 ArcTanh(const X: Extended): Extended; { IN: |X| <= 1 }
16) 函数 ArcCotH(const X: Extended): Extended; { IN: X <> 0 }
17) 函数 ArcSecH(const X: Extended): Extended; { IN: X <> 0 }
18) 函数 ArcCscH(const X: Extended): Extended; { IN: X <> 0 }
四、 对数函数
1) 函数 LnXP1(const X: Extended): Extended; { Ln(X + 1), accurate for X near zero }
2) 函数 Log10(const X: Extended): Extended; { 基数为10的X对数}
3) 函数 Log2(const X: Extended): Extended; {基数为2的X对数}
4) 函数 LogN(const Base, X: Extended): Extended; {基数为N的X对数}
五、 指数函数
1) 函数 IntPower(const Base: Extended; const Exponent: Integer): Extended register;
IntPower:任意基数Base的Exponent整数幂。快
2) 函数 Power(const Base, Exponent: Extended): Extended;
Power:任意基数的任意幂; 对于分指数或 |指数| > MaxInt, 基数必须> 0.
六、 各种例程
1) 过程 Frexp(const X: Extended; var Mantissa: Extended; var Exponent: Integer) register;
Frexp:分离X 的尾数和指数
2) 函数 Ldexp(const X: Extended; const P: Integer): Extended register;
Ldexp:返回 X*2^P
3) 函数 Ceil(const X: Extended):Integer;
Ceil:最小整数>= X, |X| < MaxInt
4) 函数 Floor(const X: Extended): Integer;
Floor:最大整数<= X, |X| < MaxInt
5) 函数 Poly(const X: Extended; const Coefficients: array of Double): Extended;
Ploy:计算一元多项式A[0] + A[1]*X + ... + A[N]*X^N 在变量为X时的值。
七、 统计函数
对于这些统计的和财政函数,普通的商业表宏名字已经写在每个函数后面的注释中
1) 函数 Mean(const Data: array of Double): Extended;
算术平均值(AVG): SUM / N ;SUM(Data) / (High(Data) - Low(Data) + 1)
2) 函数 Sum(const Data: array of Double): Extended register;求Double数的和 (SUM) }
3) 函数 SumInt(const Data: array of Integer): Integer register;求Integer数和
4) 函数 SumOfSquares(const Data: array of Double): Extended;Double平方和
5) 过程 SumsAndSquares(const Data: array of Double; var Sum, SumOfSquares: Extended) register;返回Double总和、平方和
6) 函数 MinValue(const Data: array of Double): Double;返回Double数组中最小数(MIN)
7) 函数 MinIntValue(const Data: array of Integer): Integer;返回Integer数组中最小数(MIN)
8) 函数 Min(const A, B: Integer): Integer; overload;返回最小整数
9) 函数 Min(const A, B: Int64): Int64; overload;返回最小Int64数
10) 函数 Min(const A, B: Single): Single; overload; 返回最小Single数
11) 函数 Min(const A, B: Double): Double; overload; 返回最小Double数
12) 函数 Min(const A, B: Extended): Extended; overload;返回最小Extended数
13) 函数 MaxValue(const Data: array of Double): Double;返回Double数组最大数(MAX)
14) 函数 MaxIntValue(const Data: array of Integer): Integer;返回Integer数组最大数
15) 函数 Max(const A, B: Integer): Integer; overload;返回最大Integer数
16) 函数 Max(const A, B: Int64): Int64; overload;返回最大Int64数
17) 函数 Max(const A, B: Single): Single; overload;返回最大Single数
18) 函数 Max(const A, B: Double): Double; overload;返回最大Double数
19) 函数 Max(const A, B: Extended): Extended; overload;返回最大Extended数
20) 函数 StdDev(const Data: array of Double): Extended;
样本标准偏差STD; Sqrt(Variance(Data))
21) 过程 MeanAndStdDev(const Data: array of Double; var Mean, StdDev: Extended);
在一次调用中计算算术平均值(Mean)和标准偏差(StdDev)
22) 函数 PopnStdDev(const Data: array of Double): Extended;
总体标准差;Sqrt(PopnVariance(Data))
23) 函数 Variance(const Data: array of Double): Extended;
采样方差(样品方差);TotalVariance(Data) / (High(Data) - Low(Data))
24) 函数 PopnVariance(const Data: array of Double): Extended;
总体方差:(VAR or VARP): TotalVariance/ N }; TotalVariance(Data) / (High(Data) - Low(Data) + 1)
25) 函数 TotalVariance(const Data: array of Double): Extended;
方差总合:SUM(i=1,N)[(X(i) - Mean)**2] ;SumSquares - Sqr(Sum)/(High(Data) - Low(Data) + 1)
26) 函数 Norm(const Data: array of Double): Extended;
欧几里得L2-范数Sqrt(SumOfSquares) }
27) 过程 MomentSkewKurtosis(const Data: array of Double; var M1, M2, M3, M4, Skew, Kurtosis: Extended);
MomentSkewKurtosis::计算统计分解的核心因数
M1:平均值(Mean)
M2:方差(Variance)
Skew:反映分布的对称性[M3 / (M2**(3/2))]
Kurtosis:反映分布的平坦性[M4 / Sqr(M2)]
28) 函数 RandG(Mean, StdDev: Extended): Extended;
RandG:产生一个随机数,随机数符合正态分布于Mean数附近,用于模拟数据抽取样品误差
八、 普通/混杂函数
1. 极端测试:
1) 函数 IsNan(const AValue: Double): Boolean; overload;
比如infinity, NaN 双精度值有7FF指数, 而且NaN 值有不为0的分数域
2) 函数 IsNan(const AValue: Single): Boolean; overload;
3) 函数 IsNan(const AValue: Extended): Boolean; overload;
4) 函数 IsInfinite(const AValue: Double): Boolean;
比如 NaN, 一个infinity 双精度值有一个7FF指数, 但是infinity 值有一个0分数域(have a fraction field of 0)。Infinity 值能够在最高符号位被指定为正数或负数
2. 简单符号测试
type
TValueSign = -1..1;
const
NegativeValue = Low(TValueSign);
ZeroValue = 0;
PositiveValue = High(TValueSign);

1) 函数 Sign(const AValue: Integer): TValueSign; overload;
2) 函数 Sign(const AValue: Int64): TValueSign; overload;
3) 函数 Sign(const AValue: Double): TValueSign; overload;

3. 浮点数比较
CompareFloat 和 SameFloa)如果epsilon没有给出或者是0,那将试图以一个当前浮点数类型相匹配的误差来计算比较。
1) 函数 CompareValue(const A, B: Extended; Epsilon: Extended = 0): TValueRelationship; overload;
2) 函数 CompareValue(const A, B: Double; Epsilon: Double = 0): TValueRelationship; overload;
3) 函数 CompareValue(const A, B: Single; Epsilon: Single = 0): TValueRelationship; overload;
4) 函数 CompareValue(const A, B: Integer): TValueRelationship; overload;
5) 函数 CompareValue(const A, B: Int64): TValueRelationship; overload;
6) 函数 SameValue(const A, B: Extended; Epsilon: Extended = 0): Boolean; overload;
7) 函数 SameValue(const A, B: Double; Epsilon: Double = 0): Boolean; overload;
8) 函数 SameValue(const A, B: Single; Epsilon: Single = 0): Boolean; overload;

4. 零测试
IsZero: 若值为0(或者是非常非常接近于0)则返回“真”
1) 函数 IsZero(const A: Extended; Epsilon: Extended = 0): Boolean; overload;
2) 函数 IsZero(const A: Double; Epsilon: Double = 0): Boolean; overload;
3) 函数 IsZero(const A: Single; Epsilon: Single = 0): Boolean; overload;
5. 简单易用的条件函数
1) 函数 IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
2) 函数 IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
3) 函数 IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;
6. 各种随机函数
1) 函数 RandomRange(const AFrom, ATo: Integer): Integer;
2) 函数 RandomFrom(const AValues: array of Integer): Integer; overload;
3) 函数 RandomFrom(const AValues: array of Int64): Int64; overload;
4) 函数 RandomFrom(const AValues: array of Double): Double; overload;
7. 范围测试函数
1) 函数 InRange(const AValue, AMin, AMax: Integer): Boolean; overload;
2) 函数 InRange(const AValue, AMin, AMax: Int64): Boolean; overload;
3) 函数 InRange(const AValue, AMin, AMax: Double): Boolean; overload;
8. 范围切断函数
1) 函数 EnsureRange(const AValue, AMin, AMax: Integer): Integer; overload;
2) 函数 EnsureRange(const AValue, AMin, AMax: Int64): Int64; overload;
3) 函数 EnsureRange(const AValue, AMin, AMax: Double): Double; overload;
9. 16位整数除法一次调用得出结果和余数
1) 过程 DivMod(Dividend: Integer; Divisor: Word; var Result, Remainder: Word);
10. 圆整到特殊数字或10的幂
ADigit 在37 到-37范围之中,下面是一些示例
3 = 10^3 = 1000 = thousand's place
2 = 10^2 = 100 = hundred's place
1 = 10^1 = 10 = ten's place
-1 = 10^-1 = 1/10 = tenth's place
-2 = 10^-2 = 1/100 = hundredth's place
-3 = 10^-3 = 1/1000 = thousandth's place }
type
TRoundToRange = -37..37;
1) 函数 RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
RoundTo函数的变量遵循不对称算术舍入运算法则(如果Frac(X) < 0.5则返回X否则返回X+1)。其缺省凑整到1/100。
2) 函数 SimpleRoundTo(const AValue: Double; const ADigit: TRoundToRange = -2): Double;
九、 金融函数,
遵循Quattro Pro标准,参数约定概念。金钱收入为正,金钱支出为负 (举例来说,借款人偿还贷款则借款人为负)。利率是有支付周期,11%的年度利率,相当于每个月(11 / 100) / 12 = 0.00916667

type
TPaymentTime = (ptEndOfPeriod, ptStartOfPeriod);
1) 函数 DoubleDecliningBalance(const Cost, Salvage: Extended; Life, Period: Integer): Extended;
{ Double Declining Balance (DDB) }
2) 函数 FutureValue(const Rate: Extended; NPeriods: Integer; const Payment, PresentValue: Extended; PaymentTime: TPaymentTime): Extended;
未来值(终值(FVAL))
3) 函数 InterestPayment(const Rate: Extended; Period, NPeriods: Integer; const PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
利息收入(IPAYMT)
4) 函数 InterestRate(NPeriods: Integer; const Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
利率(IRATE)
5) 函数 InternalRateOfReturn(const Guess: Extended; const CashFlows: array of Double): Extended;
内部盈利率(利润率)(Internal Rate of Return. (IRR))需要现金流数组
6) 函数 NumberOfPeriods(const Rate: Extended; Payment: Extended; const PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
周期数{ Number of Periods (NPER) }
7) 函数 NetPresentValue(const Rate: Extended; const CashFlows: array of Double; PaymentTime: TPaymentTime): Extended;
现在净价值,纯现值(Net Present Value. (NPV),需要现金流数组
8) 函数 Payment(Rate: Extended; NPeriods: Integer; const PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
支出 { Payment (PAYMT) }
9) 函数 PeriodPayment(const Rate: Extended; Period, NPeriods: Integer; const PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
支付周期{ Period Payment (PPAYMT) }
10) 函数 PresentValue(const Rate: Extended; NPeriods: Integer; const Payment, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
现值{ Present Value (PVAL) }
11) 函数 SLNDepreciation(const Cost, Salvage: Extended; Life: Integer): Extended;
直线折旧{ Straight Line depreciation (SLN) }
12) 函数 SYDDepreciation(const Cost, Salvage: Extended; Life, Period: Integer): Extended;
折旧{ Sum-of-Years-Digits depreciation (SYD) }
十、 FPU 异常/精度/舍入管理
以下函数允许你控制FPU行为。控制FPU异常处理,FPU默认精度设置,FPU怎样舍入控制
type
TFPURoundingMode = (rmNearest, rmDown, rmUp, rmTruncate);
1) 函数 GetRoundMode: TFPURoundingMode; 返回当前舍入模式
2) 函数 SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode;
设置新的舍入模式并且返回旧的模式

type
TFPUPrecisionMode = (pmSingle, pmReserved, pmDouble, pmExtended);
3) 函数 GetPrecisionMode: TFPUPrecisionMode; 返回当前精度控制模式
4) 函数 SetPrecisionMode(const Precision: TFPUPrecisionMode): TFPUPrecisionMode;
设置新的精度控制模式并且返回旧的模式

type
TFPUException = (exInvalidOp, exDenormalized, exZeroDivide,
exOverflow, exUnderflow, exPrecision);
TFPUExceptionMask = set of TFPUException;
掩码中任何元素设置防止FPU产生各种异常。它企图返回一个最好的数值,经常是NaN 或 infinity。数值依靠运算和当前的舍入模式
5) 函数 GetExceptionMask: TFPUExceptionMask; 从控制字中返回异常掩码
6) 函数 SetExceptionMask(const Mask: TFPUExceptionMask): TFPUExceptionMask;
设置新的异常掩码并返回旧的
7) 过程 ClearExceptions(RaisePending: Boolean = True); 清除状态字中任何未定的异常

Delphi Math单元函数的更多相关文章

  1. Delphi 使用之函数

    函数由一句或多句代码组成,可以实现某个特定的功能.使用函数可以使代码更加易读.易懂,加快编程速度及减少重复代码.过程与函数类似,过程与函数最重要的区别在于,过程没有返回值,而函数能有返回值.     ...

  2. Delphi的四舍五入函数

    一.四舍五入法    四舍五入是一种应用非常广泛的近似计算方法,其有算术舍入法和银行家舍入法两种.    所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则是:当舍去位的数值大于等于5时,在舍去该 ...

  3. Delphi Math里的基本函数,以及浮点数比较函数(转)

    源:Delphi Math里的基本函数,以及浮点数比较函数 Delphi里的好东西太多,多到让人觉得烦.这种感觉就是当年打游戏<英雄无敌3>,改了钱以后,有钱了每天都要造建筑,明明是好事, ...

  4. Delphi Math里的基本函数,以及浮点数比较函数

    Delphi里的好东西太多,多到让人觉得烦.这种感觉就是当年打游戏<英雄无敌3>,改了钱以后,有钱了每天都要造建筑,明明是好事,可是让人觉得烦. 先记录下来,以后再回来加强对Math单元的 ...

  5. Delphi BASE64单元EncdDecd的修改

    Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...

  6. Chrome V8引擎系列随笔 (1):Math.Random()函数概览

    先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...

  7. Delphi的Trim函数

    三个Trim函数简介 函数原型 function Trim(const S: string): string; 将字符串前后的空白及控制字元清掉. 注意Trim函数只能清掉字符串前后的空格及控制字元, ...

  8. Delphi常用系统函数总结

    Delphi常用系统函数总结 字符串处理函数 Unit System 函数原型 function Concat(s1 [, s2,..., sn]: string): string; 说明 与 S : ...

  9. Delphi中的函数指针判断是否为空

    delphi函数指针 只有@@p才代表了函数指针本身的地址   assigned(p) 判断是否为空 或者用 @p=nil 来判断函数指针是不是为空 Delphi中的函数指针实际上就是指针,只是在使用 ...

随机推荐

  1. SpringMVC学习(一)——概念、流程图、源码简析

    学习资料:开涛的<跟我学SpringMVC.pdf> 众所周知,springMVC是比较常用的web框架,通常整合spring使用.这里抛开spring,单纯的对springMVC做一下总 ...

  2. HTML5时代的纯前端上传图片预览及严格图片格式验证函数(转载)

    原文地址:http://www.2cto.com/kf/201401/274752.html 一.要解决什么样的问题? 在写这个函数之前,有们童鞋在群里问如何纯前端严格验证图片格式.这在html5时代 ...

  3. javascript 时间日期处理相加,减操作方法js

    javascript 时间日期处理相加,减操作方法js function dateAddDays(dataStr,dayCount){ var strdate = dataStr; // 2017年0 ...

  4. Java接口与多态

    接口 可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成 接口的定义格式 接口的数据成员,只允许被public, static, final修饰. 接口的方 ...

  5. 为什么要使用base64编码,有哪些情景需求?

    Base64编码原理与应用 Java实现BASE64编解码 公钥证书也好,电子邮件数据也好,经常要用到Base64编码,那么为什么要作一下这样的编码呢? 我们知道在计算机中任何数据都是按ascii码存 ...

  6. 几个python练习题

    从python公众号里面看到了几道python的练习题,就拿来练练手,结果上手了发现自己还是特别水,不是很难的8道题,我只做出来5道,其中还3道题卡住了,边查边做的.原题链接在这里:http://py ...

  7. Thread Costs

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/CreatingTh ...

  8. VS 2013 代码注释掉,编译不执行问题

    先说说我遇到的问题吧.修改别人的代码,注释原来的代码或者添加新的代码,都不执行,还是编译原来的代码.而且还有一个错误:lc.exe 已退出 代码为 -1 解决方法: 1.先把lc.exe 已退出 代码 ...

  9. CMD命令不完全版

    cmd命令: 感谢GSC大佬提供命令 clearmgr : 清理垃圾 taskmgr : 任务管理器 eventvwr : 事件管理器 shutdown -s -t 10 : 关机 shutdown ...

  10. 最简单的Servlet继承HttpServlet查询数据库登录验证

    <%-- Created by IntelliJ IDEA. User: yunqing Date: 2017-12-06 Time: 9:11 To change this template ...