python - 为什么 fpectl — 浮点异常控制如此危险?

标签 python exception

我正在阅读有关 fpectlthe Python documentation 中的浮点异常控制.

它警告用户

......and its usage is discouraged and may be dangerous except in the hands of experts. See also the section Limitations and other considerations on limitations for more details.

为什么?

阅读链接的网页对我没有帮助。

最佳答案

出于多种原因,“不防御性驾驶”是不安全的。你可以这样做并且没有任何问题。或者,您可能会不走运,跑出马路,穿过中间带,撞上迎面而来的车流。

为什么它充其量是困惑的,并且很难以一种使得使用它来创建安全、可靠的代码极其困难的方式进行推理的几个原因:

  1. 它不是线程安全的。这意味着它在线程中的行为会有所不同 与非线程程序,并且可能以不同的方式不同 在几乎每个线程程序中。
  2. 它需要的支持代码和行为可以根据 具体的浮点实现。所以如果你让你的代码工作 就一个,这并不意味着您可以分发该代码 对其他系统或可能运行它的其他用户的安全 不同的 CPU 系列(例如 ARM vs x86 vs POWER),或不同的 同一 CPU 系列的几代产品(例如 AMD 与 Intel x86 的实现)。
  3. 浮点代码在 IEEE-754时代。但是那里 仍然是细微的瑕疵 那些做 numerical algorithms 注意预防。了解边界 条件,如何进行浮点近似 在这些边缘表现(或不表现), 以及不同的 FP 实现如何处理它们仍然是 重要的。减少变量是 限制编写这些算法的风险的关键方法。 使用一个鲜为人知、文档稀少、很少使用的, 不是标准 Python 的一部分 异常处理模块是相反的 “降低风险。”
  4. 风险涉及数据完整性。有可能是压音 异常会让错误或不一致的数据进入您的进一步 计算。 异常就像痛苦。 系统性信号出现问题或“不要那样做!” 关闭它们在数值处理中有着悠久的历史 导致未捕获的数据损坏。在这个普及的年代 NaNInf 支持,这比过去更不可能, 因为有带内(在数据值中)信号机制 那可以是替代指标。但是没有研究 源代码,你真的知道里面的数据发生了什么 OverflowError 的位置?你能保证它会是一样的吗 如果它是在向量或标量 FP 指令中处理的结果? 疑。 您的代码会知道其中的区别吗 在由压制的数值异常产生的 NaN 之间 与普通的缺失数据相比?可能不会。这么多新的 不确定的结果!
  5. 文档本身基本上警告说“你将需要 下拉并研究源代码,看看它是如何工作的。” 这是一条重要的三重黑钻路径。 他们出于某种原因不在标准版本中启用它。 如果你不 已经了解旅行的数值分析注意事项 它,它不适合你。

关于python - 为什么 fpectl — 浮点异常控制如此危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552013/

相关文章:

python - 使用线程时的套接字问题

python - 将 pandas 数据框中的三个单独的列转换为一个日期列

python - Django 检索模型的所有相关属性

java - 服务程序 : create text file using servlets in eclipse

android - java.lang.NumberFormatException : Invalid long: “null” 异常

c# - 多次抛出相同的异常实例

python - S3 使用 s3cmd 重定向 302 对象

python - 如何使用 python 在 Windows 上查找未分配的驱动器号

java - 为什么 Java 不允许 Throwable 的泛型子类?

database - 数据类型字符变化没有访问方法 "gist"的默认运算符类