gpt4 book ai didi

c - 如何在 C 中使用 nan 和 inf?

转载 作者:太空狗 更新时间:2023-10-29 16:15:29 28 4
gpt4 key购买 nike

我有一个数值方法可以在出现错误时返回 nan 或 inf,出于测试目的,我想暂时强制它返回 nan 或 inf 以确保正确处理这种情况。是否有一种可靠的、独立于编译器的方法来在 C 中创建 nan 和 inf 的值?

谷歌搜索大约 10 分钟后,我只能找到依赖于编译器的解决方案。

最佳答案

你可以测试你的实现是否有它:

#include <math.h>
#ifdef NAN
/* NAN is supported */
#endif
#ifdef INFINITY
/* INFINITY is supported */
#endif

INFINITY 的存在由 C99(或至少是最新草案)保证,并且“扩展为表示正数或无符号的 float 类型的常量表达式无穷大,如果可用;否则为在翻译时溢出的 float 类型的正常量。”

NAN 可能会或可能不会被定义,并且“当且仅当实现支持 float 类型的安静 NaN 时才被定义。它扩展为表示安静 NaN 的 float 类型的常量表达式。 "

请注意,如果您要比较浮点值,请执行以下操作:

a = NAN;

即便如此,

a == NAN;

是错误的。检查 NaN 的一种方法是:

#include <math.h>
if (isnan(a)) { ... }

您也可以这样做:a != a 来测试 a 是否为 NaN。

还有isfinite()isinf()isnormal()signbit() C99 中 math.h 中的宏。

C99 也有 nan 函数:

#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);

(引用:n1256)。

Docs INFINITY Docs NAN

关于c - 如何在 C 中使用 nan 和 inf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923837/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com