2013-12-13 39 views
3

在OpenCL中,有两个浮点数学常量表示无穷大。其中之一就是INFINITY。另一个,HUGE_VALF,“评估为”无限。HUGE_VALF和INFINITY常量之间的差异

这两者有什么区别? “评估”到“无限”意味着什么?

回答

7

HUGE_VALF是一个传统名称,它允许不支持无穷大的浮点系统。例如,C标准指定在某些溢出情况下返回HUGE_VALF。当C实现不支持无穷时,HUGE_VALF将是最大的可表示值。当实现确实支持无穷大时,HUGE_VALF将是无穷大。 C标准仍然允许这样做,我想有些实现仍然不支持无穷。

OpenCL使用IEEE 754(或多或少),所以它确实有无穷大,所以HUGE_VALF是无穷大。通过定义HUGE_VALF,OpenCL有助于支持将旧C代码移植到OpenCL。

关于显示“HUGE_VALF计算为+无穷大”,但INFINITY是“表示正的或无符号无穷float类型的常量表达式”,我会怀疑是否该旨在允许对HUGE_VALF某些运行时制备的措辞(例如,将其表示为1./0.)。然而,documentation也表示HUGE_VALF是“一个积极的浮点常量表达式”。在余额上,这让我觉得这个措辞简直有点草率,HUGE_VALFINFINITY是等价的。