【发布时间】:2011-11-08 08:10:40
【问题描述】:
我的应用程序是用 Delphi5 编写的。我正在使用 madExcept 来追踪错误。我找到了一个“零浮点除法”异常,它不应该出现在哪里。引发它的代码段如下:
val:=100*Power(1.25,c);
其中 'c' 实际上总是具有值 '1'。
日志的堆栈跟踪:
main thread ($338f8):
00403504 +010 MyApp.exe System 1970 +5 @FRAC
00479148 +058 MyApp.exe Math Power
007ae8a6 +262 MyApp.exe MyClass 1962 +36 TMyClass.FormMouseWheel
我在某个时候遇到了另一个异常,确实发生了除数,但是除数是一个变量,当异常发生时它的值也为“1”。我能够调试和重现。
我的问题:我错过了什么?是否有一些我不知道的关于浮点除法的误报?
此外:我没有在异常点使用任何 C++ DLL,因为它们倾向于以不同方式处理 FP 除法(返回 NaN 或 +/-INF 而不是引发异常)。
任何指针表示赞赏。
【问题讨论】:
-
听起来不太合理。我认为您的调试工具没有将您指向正确的位置,或者变量可能不是您认为的那样。
-
不记得 D5 是否已经拥有它,但是当执行该代码时,您是否尝试检查 CPU/FPU 视图中发生了什么?
-
@ldsandon 当然 D5 已经允许使用 Alt-F2 并进入 CPU/FPU 视图。好主意。但我猜
System._Frac代码中会出现未处理的 FPU 异常。 -
您是否在使用任何外部 DLL?如果是这样,他们可能已经更改了 FPU 控制字。有关更多信息,请参阅此帖子:wiert.wordpress.com/2009/05/06/…
标签: delphi floating-point division delphi-5 divide-by-zero