我不太清楚溢出错误,所以我在这里非常不知所措。
在VBA中写作时,我正在调用一个VBA函数,它是dll中C++函数的包装器(我无法访问其内部)。VBA/C++函数返回一个双精度。这是一种使用数值方法的衍生估值。
昨天有一段时间(但现在可能已经消失了),我在尝试将函数return分配给声明为double的变量时遇到了溢出错误但是在错误停止时,我可以在locals窗口(8.17…)中看到分配给double的正确值。当我将函数return分配给变量时,我得到了相同的值,没有错误,变量类型为variant/double。
知道这里会发生什么吗?我完全迷路了。提前感谢您的任何想法。R
编辑:我尝试的另一件事是在将CDbl分配给变量时将其应用于函数return。这里有一些伪代码,只是为了澄清我的情况:
Dim db as Double, va as Variant
db = DerivativeValue(a, b, c...)
这会导致溢出,但db在locals窗口中的错误值是正确的。
va = DerivativeValue(a, b, c...)
没有错误,值相同。va是变体型/双
va = CDbl(DerivativeValue(a, b, c...))
现在再次溢出。在这种情况下,我忘记了va在Locals窗口中做了什么,但很可能与情况1相同。
我的猜测是,函数返回的值看起来像双精度,但实际上不是。
变量被设计为接受任何类型的值,赋值将执行转换。我想知道对变量的赋值是否有效,因为它可以将返回的值转换为double。
如果你尝试以下操作会发生什么:
va = DerivativeValue(a,b,c...)
db = va
如果这样做有效,它将使您可以继续开发,而无需等待发现函数实际返回的内容。
额外加分。double是一个64位浮点数字。如果你有一个FPU,它可能会返回一个80位的浮点数字。