必要的 C 编译器标志以检查 MacOS(旧的和新的)是否符合 IEEE-754
Necessary C compiler flags to check MacOS (old and new) for IEEE-754 compliance
似乎 __STDC_IEC_559__
不足以测试 Apple 生态系统内的 IEEE-754 合规性,这导致了我的问题:
哪个 MacOS 完全支持 IEEE-754 或至少支持 binary32 和 binary64 格式的部分,以及如何使用一个或多个 C 预处理器宏对其进行测试?
It seems as if __STDC_IEC_559_ is insufficient to test for IEEE-754 compliance within the Apple ecosystem.
是也不是。一方面,它部分取决于您的编译器,而不仅仅是 OS。另一方面,您需要注意如何解释编译器对该宏的使用。
作为初步事项,在 C99 中引入了 __STDC_IEC_559__
宏(注意:两个 尾部下划线)。仍然有不符合 C99 的编译器,至少在默认情况下是这样。为了使测试 __STD_IEC_559__
有意义,那么,您应该首先检查编译器是否声称符合 C99 或更高版本:
#if __STDC__ && __STDC_VERSION__ >= 19901L
// __STDC_IEC_559__ may tell us something ...
#endif
假设您正在使用一个符合规范的实现,接下来您需要了解如果一个实现将 __STDC_IEC_559__
定义为 1,则它断言它符合 all 标准附件 F (C11) 或附件 G (C99) 中的规范,其中不仅涵盖浮点数据格式,还涵盖相当广泛的运算符和函数规范,包括错误边界。定义的 __STDC_IEC_559__
not 没有说明哪些部分不受支持。实际上,如今几乎每个人都使用 ISO 60559 数据格式,但完全符合 ISO 60559 的情况相对较少。
Which MacOS does support IEEE-754 full or at least the part with the binary32 and binary64 format and how to test for it with one or more C preprocessor macros?
据我所知,Intel 芯片上的所有版本的 MacOS / OS X 运行 都支持 binary32 和 binary64 作为本机浮点格式。这些平台的所有通用编译器都将这些本机类型映射到 C float
和 double
。然而,没有可靠的标准方法来获得 C 预处理器测试,因为没有标准宏提供该信息,而实际测试将需要预处理器不执行的浮点数学运算。
最接近通过预处理器测试数据格式的方法是包含 float.h
并检查定义类型 float
和 double
特征的宏。但即使这些特征与 binary32 / binary64 的特征完全匹配,也不能证明内存中的实际表示采用这些形式。如果您特别关心表示,那么您将需要一个外部测试程序。
似乎 __STDC_IEC_559__
不足以测试 Apple 生态系统内的 IEEE-754 合规性,这导致了我的问题:
哪个 MacOS 完全支持 IEEE-754 或至少支持 binary32 和 binary64 格式的部分,以及如何使用一个或多个 C 预处理器宏对其进行测试?
It seems as if __STDC_IEC_559_ is insufficient to test for IEEE-754 compliance within the Apple ecosystem.
是也不是。一方面,它部分取决于您的编译器,而不仅仅是 OS。另一方面,您需要注意如何解释编译器对该宏的使用。
作为初步事项,在 C99 中引入了 __STDC_IEC_559__
宏(注意:两个 尾部下划线)。仍然有不符合 C99 的编译器,至少在默认情况下是这样。为了使测试 __STD_IEC_559__
有意义,那么,您应该首先检查编译器是否声称符合 C99 或更高版本:
#if __STDC__ && __STDC_VERSION__ >= 19901L
// __STDC_IEC_559__ may tell us something ...
#endif
假设您正在使用一个符合规范的实现,接下来您需要了解如果一个实现将 __STDC_IEC_559__
定义为 1,则它断言它符合 all 标准附件 F (C11) 或附件 G (C99) 中的规范,其中不仅涵盖浮点数据格式,还涵盖相当广泛的运算符和函数规范,包括错误边界。定义的 __STDC_IEC_559__
not 没有说明哪些部分不受支持。实际上,如今几乎每个人都使用 ISO 60559 数据格式,但完全符合 ISO 60559 的情况相对较少。
Which MacOS does support IEEE-754 full or at least the part with the binary32 and binary64 format and how to test for it with one or more C preprocessor macros?
据我所知,Intel 芯片上的所有版本的 MacOS / OS X 运行 都支持 binary32 和 binary64 作为本机浮点格式。这些平台的所有通用编译器都将这些本机类型映射到 C float
和 double
。然而,没有可靠的标准方法来获得 C 预处理器测试,因为没有标准宏提供该信息,而实际测试将需要预处理器不执行的浮点数学运算。
最接近通过预处理器测试数据格式的方法是包含 float.h
并检查定义类型 float
和 double
特征的宏。但即使这些特征与 binary32 / binary64 的特征完全匹配,也不能证明内存中的实际表示采用这些形式。如果您特别关心表示,那么您将需要一个外部测试程序。