在OpenCL中,有两个浮点数学常量表示无穷大。其中之一就是INFINITY
。另一个,HUGE_VALF
,“评估为”无限。HUGE_VALF和INFINITY常量之间的差异
这两者有什么区别? “评估”到“无限”意味着什么?
在OpenCL中,有两个浮点数学常量表示无穷大。其中之一就是INFINITY
。另一个,HUGE_VALF
,“评估为”无限。HUGE_VALF和INFINITY常量之间的差异
这两者有什么区别? “评估”到“无限”意味着什么?
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_VALF
和INFINITY
是等价的。