gpt4 book ai didi

performance - 正确处理 ISO-Prolog 中的非正规 float

转载 作者:行者123 更新时间:2023-12-03 20:24:46 26 4
gpt4 key购买 nike

非正规 float 一些特别的东西:

floating point number classification and representation

ISO-Prolog 标准如何处理这些问题?

我很清楚,每当这些异常发生时引发 evaluation_error(underflow) 异常是处理它们的正确方法,但这会产生额外的成本——每个必须检查产生的 float 。

但是许多处理器提供的“将非正规数清零”(FTZ) 和“将非正规数视为零”(DAZ) 操作模式又如何呢? Prolog 实现可以使用这些吗?如果可以,它们如何正确地做到这一点?

是否 (1) 记录这些操作模式的使用,(2) 确保非正规化被刷新为相同符号的零 (FTZ),以及 (3) 确保非正规化被视为相同符号的零 (DAZ) )够了吗?请帮忙!

最佳答案

不要跳过它们。然而,来自 ISO/IEC 13211-1:1995 9.1.4.2 浮点结果函数的简短回答:

It shall be implementation defined whether a processor
chooses round(x) or underflow when 0 < |x| < fminN.

但首先,我们称它们为次正规。过时的(至少根据 LIA 1:2012 )概念 denormal (回想起来)不是很有帮助,因为它暗示了一些反常的、破坏性的属性。不:它们并不像你建议的那样特别。要看到这一点,请考虑实数的数轴。可以精确表示的数字被标记出来,并且在接近零(从两边)时彼此越来越接近。次正规是最接近零的那些。它们与零之间的距离与最小正规数之间的距离相同。那是他们的异常(或者可以说是异常)。如果你现在删除那些次正规,你会得到一个巨大的差距,导致更多的数值异常。这就像您在尺子上刮掉零附近的标记,然后使用这把破损的尺子测量1。因此,在没有次正规的情况下,剩余的数字并不像人们可能认为的那样正常,而是异常的,容易出现更多错误。

如果你不喜欢阅读 Kahan 关于我建议的主题,我可以向你推荐 Gustafson 的错误的终结,它比我更好地解释了次正规。

在 13211-1 中,有可能排除次正规,但这只是为了与非常 RISCy、过时的架构兼容。

正式的一致性就这么多了。从长远来看,一些 Unum 风格、CLP(BNR) 风格、Prolog IV 风格的方法可能很有前途。


1) 也就是说,如果您四舍五入为零。如果您产生异常/连续值而不是更好的数值属性,只要此类异常不发生,就会保持不变。

关于performance - 正确处理 ISO-Prolog 中的非正规 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63325437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com