如何在编译时标准可移植地检查浮点类型的超集关系?
浮点类型值可表示性的编译时检查问题
是否存在符合标准且可移植的编译时检查方法,判断一种浮点类型的所有值能否被另一种浮点类型表示?请同时考虑std::bfloat16_t这类新类型。
我发现以下结论:
- float是double的可靠子集
- double是long double的可靠子集
- 显然float也是long double的可靠子集
我至少可以针对这些组合特化一个谓词。
关于long double的定义说明:
long double——扩展精度浮点类型。若支持则匹配IEEE-754 binary128格式,否则若支持则匹配IEEE-754 binary64扩展格式,否则匹配某种非IEEE-754扩展浮点格式(只要其精度优于binary64且范围至少与binary64相当),否则匹配IEEE-754 binary64格式。
若我的理解正确,long double至少可以表示IEEE-754 binary64的所有值。该信息可用于将固定类型与long double进行比较,当然前提是上述定义内容准确。
内容的提问来源于stack exchange,提问作者Martin Fehrs
相关产品推荐
相关产品推荐

