必要的C编译器标志,以检查IEEE-754合规性MACOS(旧和新)



似乎__STDC_IEC_559__不足以测试Apple生态系统内的IEEE-754合规性,这导致了我的问题:

哪些MACO支持IEEE-754完全或至少具有binary32和binary64格式的零件,以及如何使用一个或多个C预处理器宏测试?

似乎__STDC_IEC_559_不足以测试Apple生态系统中的IEEE-754合规性。

是,否。一方面,它部分取决于您的编译器,而不仅仅是操作系统。对于另一个,您需要小心如何解释编译器对该宏的使用。

作为初步物质,__STDC_IEC_559__宏(注意:两个尾随下划线)在C99中引入。至少默认情况下,仍然有一些编译器不符合C99。因此,要使__STD_IEC_559__完全有意义,那么您应该首先检查编译器是否声称符合C99或更高版本:

#if __STDC__ && __STDC_VERSION__ >= 19901L
// __STDC_IEC_559__ may tell us something ...
#endif

假设您正在使用合格的实现,您接下来需要意识到,如果实现将__STDC_IEC_559__至1定义,则声称它符合 all> all> All 附件中的规格(C11)标准的G(C99)或附件G(C99),不仅涵盖了浮点数据格式,还涵盖了运算符和功能(包括误差范围)的各种规格。定义的__STDC_IEC_559__ 不是没有说明什么部分不支持。实际上,如今几乎每个人都使用ISO 60559数据格式,但是完整的ISO 60559一致性相对罕见。

哪些MACO支持IEEE-754完全或至少具有binary32和binary64格式的零件,以及如何使用一个或多个C预处理器宏测试?

据我所知,在英特尔芯片上运行的MacOS/OS X的所有版本都支持Binary32和Binary64作为天然浮点格式。这些平台的所有常见编译器将这些本机类型映射到floatdouble。但是,没有可靠的标准方法来获得C预处理器测试,但是,由于没有标准宏提供该信息,因此实际测试需要浮点数数学,预处理器未执行。

您可以通过预处理器来测试数据格式的最接近的是包括float.h并检查定义类型floatdouble特征的宏。但是,即使这些特征与binary32/binary64的特征完全匹配,也不能证明内存中的实际表示形式采用这些形式。如果您特别关心表示形式,则需要一个外部测试程序。

最新更新