在OpenCL中,有两个表示无穷大的浮点数学常量。其中一个就是INFINITY
。另一个,HUGE_VALF
,“评估为”无穷大。
这两者有什么区别? “评估”无限是什么意思?
答案 0 :(得分:8)
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
和{ {1}}是等价的。