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

时间:2017-08-07 16:54:02

标签: python exception exception-handling

我正在阅读the Python documentation中的fpectl - 浮点异常控制。

警告用户

  

......并且不鼓励使用它,除非在专家手中,否则可能很危险。有关更多详细信息,另请参阅限制和有关限制的其他注意事项。

为什么吗

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

1 个答案:

答案 0 :(得分:1)

由于许多原因,“不防御性驾驶”是不安全的,这是不安全的。你可能会这样做并且没有任何麻烦。或者你可能会运气不好,跑到马路对面,穿过中间位置,然后进入迎面而来的交通。

只是为什么它充其量混乱,并且难以以某种方式推理使用它来创建安全可靠的代码非常困难的原因只有几个:

  1. 这不是线程安全的。意味着它在线程中的行为会有所不同 与非线程程序相比,可能以不同的方式有所不同 几乎每个线程程序。
  2. 需要支持代码,行为可能因此而异 具体的浮点实现。所以,如果你的代码工作 在一个,这并不意味着你可以分发该代码 对其他系统或可能运行它的其他用户的安全性 不同的CPU系列(例如ARM vs x86 vs POWER),或者不同 同一CPU家族的几代人(例如AMD与英特尔 x86的实现。
  3. 浮点代码非常便于携带 IEEE-754时代。但那里 仍然是微妙的瑕疵 那些人在做 numerical algorithms 小心谨慎。理解边界 条件,浮点近似 在这些边缘表现(或不表现), 以及不同的FP实现如何处理它们仍然是 重要。减少变量是 在编写这些算法时限制风险的关键方法。 使用知之甚少,记录不良,很少使用, 不-部分的标准的Python 异常处理模块是相反的 “降低风险。”
  4. 风险涉及数据完整性。压扁有可能 异常会将不良或不一致的数据放入您的数据中 计算。 例外就像痛苦。 系统性的信号是错误的或“不要那样做!” 关闭它们在数值处理方面有很长的历史 导致未被捕获的数据损坏。在这个广泛的时代 NaNInf支持,这比过去很少, 因为存在带内(在数据值中)信令机制 这可以是替代指标。但没有研究 源代码,你真的知道数据发生了什么 OverflowError的地方?你能保证会一样吗? 如果它是在向量或标量FP指令中处理的结果? 疑。 你的代码会知道区别吗? 介于NaN之间,这是由于压抑的数字异常造成的 与普通的丢失数据相比?可能不是。这么多新人 不确定的结果!
  5. 文档本身基本上警告“你将需要 下载并研究源代码,看看它是如何工作的。“ 这是一条重要的三重黑钻石路径。 出于某种原因,它们不会在标准版本中启用它。 如果你不这样做 已经理解了旅行中的数字分析注意事项 它,它不适合你。