sta*_*lue 13 c floating-point initialization nan undefined
对于非数学原因未定义的值,使用IEEE754浮点NaN(非数字)是一个好主意吗?
在我们的情况下,它们尚未设置,因为尚未从其他设备接收到值.上下文是使用IEC1131 REAL32值的嵌入式系统.编辑:编程语言是C,所以我们很可能使用来自C99的NAN和isnanf(x).虽然我们可能需要一些额外的扭曲来将这些扭曲到我们的操作系统兼容性层中.
编程语言中的默认设置似乎是初始化具有正零的浮点变量,其内部表示全为零.这对我们来说是不可用的,因为0在有效值的范围内.
使用NaN似乎是一个干净的解决方案,但也许它比它的价值更麻烦,我们应该选择其他一些价值?
Ste*_*non 11
刚刚注意到这个问题.
这是IEEE 754委员会考虑的NaN的用途之一(我是委员会成员).算术中NaNs的传播规则使其非常具有吸引力,因为如果您有一系列涉及某些初始化数据的计算结果,则不会将结果误认为是有效结果.它还可以通过计算回溯,以便更直接地找到使用初始化数据的位置.
也就是说,有一些缺陷超出了754委员会的控制范围:正如其他人所指出的那样,并非所有硬件都支持NaN值的速度,这可能会导致性能危害.幸运的是,在性能关键设置中,人们通常不会对初始化数据进行大量操作.