我必须检查一个浮点变量以确定特定变量是否存在。理想情况下,它应该是一个 bool 值或至少是一个 int。由于接口(interface)限制和遗留代码,我无法将数据类型更改为 bool。所以如果我必须要检查,我可以直接像下面的示例代码那样做吗:
void check(float f)
{
if (!f)
printf ("Zero val!\n");
else
printf ("Value exists!\n");
}
考虑到值是如何存储在 float 变量中的,这是否是万无一失的?或者是否有更好的方法来做到这一点。将其转换为空头并进行检查是不可能的,因为: 如果值为“1”,则存储为 0.9999998;将其转换为 short 会导致错误的“0”。
P.S 代码恰好出现在 Objective C 文件中,但采用的是 C 格式。
最佳答案
您所拥有的将起作用,但需要注意的是,它会将正零和负零都检测为零值。这对您的目的可能重要,也可能不重要。如果您在没有默认 IEEE-754 行为的平台上运行(如许多嵌入式平台),则非规范化也可能通过 !f
检查,具体取决于您的编译器如何处理它。这对您来说可能不是问题,但需要注意。
如果您将来必须做这种事情,最好使用“非数字”来指示未初始化的 float 据,然后您可以使用 (f != f) 检查
或 isnan(f)
。
关于检查浮点变量是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3332266/