delphi - 在单个函数期间禁用浮点异常

标签 delphi delphi-xe6

我可以将 Delphi 代码包装在未记录的 {$finiteFloat OFF|ON} 编译器指令中(如下所示)以在函数期间禁用浮点异常吗?

{$finiteFloat OFF}
a := 5.0;
b := 0.0;
c := a/b;  // do not raise exception here!
{$finiteFloat ON}

我知道在常量为 {$J} 的情况下我可以,但我不认为 {$finiteFloat} 可以做到,因为它的范围是全局的。有人能证实吗?

最佳答案

此编译器指令仅适用于现已失效的 .net 编译器,这解释了为什么它没有记录在案。因此,该指令对您的程序没有影响,因为您没有使用 .net 编译器。要使用编译器屏蔽浮点异常,请调用 SetExceptionMask

这个article Hallvard Vassbotn 的以下示例代码说明了这一点:

{$IFDEF CLR}
  {$FINITEFLOAT OFF}
{$ELSE}
  Math.SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, 
    exUnderflow, exPrecision]);
{$ENDIF}
One := 0;
Two := 42;
Three := Two / One; // Returns +Inf, no exception raised

请注意 Hallvard 如何仅将 $FINITEFLOAT 与 .net 编译器一起使用。本文还解释了为什么 .net 上需要此指令。

关于delphi - 在单个函数期间禁用浮点异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34777301/

相关文章:

delphi - TSaveDialog 失败并禁用客户端视觉样式

android - Delphi XE6 Firemonkey 表格

delphi - 为什么 TBitBtn 中包含的字形如此丑陋且过时?

multithreading - 如何使用 AsyncCalls 调用无参数类过程?

delphi - 为什么没有为子类生成接口(interface)表?

delphi - 组件设计 - "File not found: ' DockForm.dcu”?

sockets - 套接字错误 10053 软件导致连接中止

delphi - TPanel 在包含 TWebBrowser 时不会自动调整大小

delphi - 对 TListView 对象内的项目进行分组?

delphi - 如何在Delphi中的Units初始化部分捕获异常