VBA实现指定数学公式的自定义函数计算结果不准确,求助错误原因
代码存在的核心问题
- 数据类型设置错误
你将所有入参和函数返回值都定义为Integer类型,该类型在VBA中仅能存储-32768到32767之间的整数,所有计算得到的小数部分都会被直接截断或四舍五入,是精度不达标的最主要原因。涉及浮点运算的场景应该使用支持小数存储的Double类型。 - Z公式逻辑编写错误
目标公式为Z = C * Exp ( -k * t),你的代码写为c / Exp(-k * t),二者计算结果完全不符:x/Exp(-y)等价于x*Exp(y),和原式的指数符号相反,计算结果会出现指数级偏差。 - P公式写法存在冗余(可选优化)
当前你写的(10 ^ a) / 10 ^ (b / (t + c))和目标公式10 ^ (A - B/(T+C))数学上等价,但直接按原式结构编写可以减少一次幂运算,降低浮点计算的累计误差。
修正后的代码
' 实现P公式的函数 Function P(a As Double, b As Double, c As Double, t As Double) As Double P = 10 ^ (a - b / (t + c)) End Function
' 实现Z公式的函数 Function Z(c As Double, k As Double, t As Double) As Double Z = c * Exp(-k * t) End Function
内容的提问来源于stack exchange,提问作者Wanna-Be-Dexter
相关产品推荐
相关产品推荐

