VBA Exp()溢出

这是VBA家伙的一个非常简单的问题。 我在一些函数上运行牛顿的方法,偶尔我发现一个猜测,我只能假设溢出Exp()函数(并停止代码)。 你们有什么build议来处理这个案子? (也许某种error handling?)

如果牛顿的方法因为这种情况或任何forms的放空而失败,我想继续我的平分代码。

顺便说一句,我想也许是为了减less这种情况而采取日志,但说实话,我正在用一些我还没有完全理解的math,我想处理牛顿的方法在任何情况下失败的情况第一。

免责声明:我是一个完整的VBA初学者,所以任何build议将被阅读和赞赏。 提前致谢。

编辑:我被要求发布代码。 首先,感谢阅读。 不幸的是,由于商业原因,我不能发布整个代码,但是我可以给出这些基本概要。 我创build了一个模块和一个函数。 在这个函数里面,我有:

Newtons Method Loop

Bisection Loop

在牛顿的方法循环中,我已经追溯到我有一个约28000左右的下一个猜测的点,我将赋值给一个variablesh Exp(28,000)或者环岛。 debugging器在那个时候断开; 我的代码基本上退出,无论我的函数应该返回的值产生#VALUE! 在我的牢房里

我知道这不是很多的信息,但我希望(并认为)应该足够了。 纠正我,如果我错了。

编辑2:如果一切都失败了,我会明确地捕捉到太大的值,但我想知道是否有一个更强大和优雅的解决scheme。

毫不奇怪,如果Exp(28,000)是1.8×10 12160 ,那么它会溢出,你能传给Exp的最大值是~709。

如果你想退出你的循环,如果你遇到一个太大的值,只是检查之前通过它的价值;

 function Newton const MAX_EXP_ARGUMENT as double = 709.782712893# do .... if (abs(var) <= MAX_EXP_ARGUMENT) then r = exp(var) else exit do '// exit the loop end if '//use r loop do .... 

在VBA中,曾经有一个SO问题涉及到大于Long的数字 。

接受的答案指向一个称为大数字算术的链接。 我只是尝试使用该示例来实现exp(28000)的示例,但在处理几个循环后收到“types不匹配”错误。 但是,这可能是我仓促执行的错。 如果你到目前为止没有线索,我会从那里开始。