C 检查浮点变量是否存在

C 检查浮点变量是否存在,c,objective-c,C,Objective C,我必须检查一个浮点变量,以确定某个特定变量是否存在。理想情况下,它应该是bool值或至少是int。由于接口约束和遗留代码,我无法将数据类型更改为bool。因此,如果我必须进行检查,我可以直接按照示例代码中的如下所示进行检查: void check(float f) { if (!f) printf ("Zero val!\n"); else printf ("Value exists!\n");

我必须检查一个浮点变量,以确定某个特定变量是否存在。理想情况下,它应该是bool值或至少是int。由于接口约束和遗留代码,我无法将数据类型更改为bool。因此,如果我必须进行检查,我可以直接按照示例代码中的如下所示进行检查:

    void check(float f)
    {
        if (!f)
            printf ("Zero val!\n");
        else
            printf ("Value exists!\n");
    }
考虑到值是如何存储在浮点变量中的,这是傻瓜式的还是有更好的方法来实现这一点。将其抛到一个空位并进行检查将退出游戏,因为: 如果值为“1”,则存储为0.999998;将其转换为空头将导致错误的“0”


p.S代码碰巧出现在一个目标C文件中,但它是C格式的。

您所拥有的将起作用,但需要注意的是,它将检测到正零和负零作为零值。这对你的目的可能重要,也可能不重要。如果您运行的平台没有默认的IEEE-754行为(像许多嵌入式平台一样),那么非规范化也可能传递
!f
检查,具体取决于编译器的处理方式。这对你来说可能不是问题,但需要注意


如果将来必须这样做,最好使用“非数字”来表示未初始化的浮点数据,然后可以使用
(f!=f)
isnan(f)

检查这些数据。这里有一个提示:0仍然是浮点值。:)这个问题欺骗了我!!谢谢罗伯特的提示,只是好奇而已。浮点值(1)是否有可能存储为0.99999或1.00001,而不涉及任何计算(如除法)?1完全可以用任何形式表示,并且总是简单的1。但是,1.1不能用浮点表示。@voidone:What R。。所说的是正确的;值1.0在所有标准浮点格式中都可以表示,并且由于在这些格式之间或从整数格式转换而不会进行舍入。