excel - VBA Exp() 溢出

标签 excel vba exp

对于 VBA 人员来说,这是一个非常简单的问题。我在一些函数上运行牛顿法,偶尔我发现我只能假设溢出 Exp() 函数(并停止代码)。你们有什么建议可以简单地处理这个案子? (也许是某种错误处理?)

如果牛顿的方法由于这种或任何类型的爆炸而失败,我想在该点以下继续我的二等分代码。

顺便说一句,我考虑过可能会记录日志以降低这种情况的可能性,但老实说,我正在处理一些我尚未完全理解的数学,并且我想处理牛顿方法无论如何都失败的情况第一的。

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

编辑:我被要求发布代码。首先,感谢阅读。不幸的是,由于业务原因,我无法发布整个代码,但我可以给出非常简单的大纲。我创建了一个模块和一个函数。在这个函数中,我有:
Newtons Method LoopBisection Loop
在牛顿方法循环中,我已经追踪到一个点,我下一次猜测大约是 28,000 左右,并且我将值 Exp(28,000) 或回旋处分配给变量 h。调试器在那个时候中断;我的代码基本上退出了,我的函数应该返回的任何值都会产生#VALUE!在我的牢房里。

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

编辑 2:如果所有其他方法都失败了,我将明确捕获太大的值,但我想知道是否有更强大和优雅的解决方案。

最佳答案

考虑到 Exp(28,000),它会溢出并不奇怪。是 1.8x1012160,您可以传递给 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 ....

关于excel - VBA Exp() 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331416/

相关文章:

python - numpy.exp() 到底是做什么的?

html - Excel VBA 更改 HTML 选择标记中的选项

VBA:使用未声明的变量?

moving-average - J 中的指数移动平均线

vba - 更改代码,使其不会填充更多单元格,只需替换为更改

vba - Worksheet_SelectionChange 和 Workbook_SheetSelectionChange 事件的用法

r - R中的 'rexp(1000, 1)'和 'replicate(1000, rexp(1,1))'有什么区别?

excel - 使用 VBA 从 Access 运行后从任务管理器中删除 Excel 任务

excel - 如何搜索多个模式以删除行?

vba - 如何使用 Union 组合两个不相邻的范围?