检查浮点变量是否存在

标签 c objective-c

我必须检查一个浮点变量以确定特定变量是否存在。理想情况下,它应该是一个 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/

相关文章:

objective-c - 什么会导致 CFSocket 自行关闭?

检查有限线截取 C

iphone - 更改 xcode 项目路径时出现小写路径问题

c - Libcurl ftp通配符上传

c - 与 off_t 等效的 MPI 数据类型是什么?

objective-c - 从 NSDocument 类外部保存 cocoa 文档

iphone - 用 Quartz 2D 绘制中文字体字形?

iphone - 在 iOS 6 中调整大小

c - limits.h 中值末尾的 i64 和 i32 是什么意思?

c - 这个声明在 C11 标准中意味着什么(关于可变参数函数)?