[我想问一个在this one之后的问题,如果编译器使用标准,则定义检查会很好地回答这个问题。但是,这仅适用于C。有没有办法在C ++中做同样的事情?
我不希望将浮点类型转换为文本或使用一些非常复杂的转换函数。我只需要编译器检查。如果您知道此类兼容编译器的列表,请发布链接。我找不到它。
实际上,您有一种更简单的方法可以用C ++实现。根据C ++标准18.2.1.1
,numeric_limits
中存在类std
。为了访问所述静态成员,您只需执行以下操作:
std::numeric_limits<double>::is_iec559;
或:
std::numeric_limits<float>::is_iec559;
如果正在使用IEEE 754,应返回true
,否则返回false。
作为一种替代方法,对于C ++,Adam's answer的第二部分也应这样做。
尽管此帖子有些陈旧(10年),但是您仍然可以尝试使用此方法。它也可以在C中使用:
#ifndef __STDC_IEC_559__
#error The following Programm only supports float operations using the IEEE 754 Standard
#endif