Pav*_*kin 5 c floating-point gcc clang half-precision-float
我试图在编译时确定_Float16受支持的:
#define __STDC_WANT_IEC_60559_TYPES_EXT__
#include <float.h>
#ifdef FLT16_MAX
_Float16 f16;
#endif
Run Code Online (Sandbox Code Playgroud)
调用:
# gcc trunk on linux on x86_64
$ gcc -std=c11 -pedantic -Wall -Wextra
t0.c:4:1: warning: ISO C does not support the '_Float16' type [-Wpedantic]
# clang trunk on linux on x86_64
$ clang -std=c11 -pedantic -Wall -Wextra
t0.c:4:1: error: _Float16 is not supported on this target
Run Code Online (Sandbox Code Playgroud)
在这里我们看到 gcc 和 clang:
FLT16_MAX_Float16主要问题:如何在编译时正确判断_Float16是支持的?
额外的问题:如果不支持相应的浮点类型,C11(或更新的)标准是否要求不定义 _MIN/宏?_MAX例如,对于整数类型 ( <stdint.h>),它是正确的:“也不应定义关联的宏”(C11,7.20 整数类型 <stdint.h>,4)。浮动类型也一样吗?
UPD20211117:
-pedantic会导致警告消失。并_Float16得到支持。伟大的!-pedantic不会导致错误消失。可能这是一个错误。感谢用户n。1.8e9-我的份额在哪里 m。为了这个想法。
UPD20211118:gcc:已-pedantic定义FLT16_MAX,这是意外的(或不是?)。
的支持_FloatN可以通过检查是否定义了关联的MIN / MAX(和其他)宏来确定(在包含float.h前面的__STDC_WANT_IEC_60559_TYPES_EXT__)之后。
额外:使用相同的原理来确定类型的支持:检查是否定义了stdint.h关联的宏。MIN / MAX
| 归档时间: |
|
| 查看次数: |
2991 次 |
| 最近记录: |