This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/F28M35H52C:查找浮点NaN常量的信息

Guru**** 1983025 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/621429/compiler-f28m35h52c-looking-for-information-on-floating-point-nan-constant

部件号:F28M35H52C

工具/软件:TI C/C++编译器

早上好,

我正在主(ARM)侧对Concerto部件进行编程。  math.h头文件中有一些对编译器常量的引用,如__NaN__和__infiniti__。

但是,我无法

1)查找这些常量定义或的位置的任何引用

2)对其用法的任何引用,头文件除外。

我要查找的是一个明确的#define,它可以在代码中用作通过通信系统对格式错误的数据请求的错误回复。  类似于_FP_ILOGBNAN定义的内容,即0x7FFFFFFF。  这是一个很好的单精度浮点值,表示一个可能的NaN。  但是,此特定定义被包装在#if _ILONG中,该问题现在提出,_ILONG定义在哪里?

如果不进一步了解标头所依赖的所有条件(其中一些条件似乎是工具/环境常量),我就无法使用这些标头常量。

谢谢,顺祝商祺!

Steve Ciricillo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果编译正常,只需右键单击并转到定义。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些宏是与IEEE-754值对应的编译器内置。 请参阅IEEE-754了解精确规格。
    NaN没有一个值;它是多种可能的位编码,尽管TI编译器仅支持一种,它相当于IEEE-754所描述的QNaN。
    尝试:
    en.wikipedia.org/.../NaN
    en.wikipedia.org/.../IEEE_754-1985
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢考古学家。 您的链接有助于我了解浮点实现。
    但是,我仍然对我正在使用的编译器中的具体实现感到好奇。 您说_NaN_和_infiniti_是编译器宏内置。 我猜它们只是不是文档中的"内置"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该使用NaN和Infinity,它们是在math.h中定义的C99宏,它们是由C99标准定义的,因此我们不会自行记录它们。

    很抱歉,我不应该说__Naan__和__infinition__是宏,而不是宏。 它们是编译器内置,与内部函数和属性类似。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为它是指使用math.h中定义的"isnan()"和"isinf()",而不是某些 #define 宏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我要编写一个函数,在失败条件下返回NaN。 我要寻找的是一个标准常量,将其作为返回值加载到浮点变量中。 我不需要测试一个值是否为NaN。 这是调用函数的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    再次感谢Arch。 我明白了。 C99定义了这些内容,因此math.h实际上不会这样做。 好的,但我仍然不知道你所引用的内置。 找不到关于这些文档的任何文档,TI似乎必须将这些文档放入其编译器手册中。 无论如何,继续使用Nan来解决我的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此,这句话"关于标准的美妙之处是,有很多选择..." 我认为是适用的。
    我不确定您的特定处理器家族,但我知道C6000 DSP虽然支持IEEE浮点标准,但不支持NaN和INF。 我不得不补充这一支持。 我定义了自己的NaN和INF (我使用的定义与IEEE标准中的定义相同)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我们开始添加C99支持之前,所有TI编译器都不支持“NaN”或“infinity”。 当时,所有编译器(包括C6000)都已升级,以便在math.h中提供显式宏NaN和INFINITY

    这种支持是以位和片段形式推出的,因此您可能会发现在该时间段内TI架构的各种编译器之间存在一些不一致的行为。

    如果您使用的是较旧的编译器,您始终可以(正如Mike建议的那样)制作自己的常量(例如,在C6000上:#define INFinityf _itof(0x7f80万)),或生成此类值的表达式(1.0 /0)。
x 出现错误。请重试或与管理员联系。