如何检查std::frexp结果合规性及*exp是否超出int范围?
关于
std::frexp指数范围检查的问题 std::frexp是一个从浮点变量中提取指数,并将指数存入int类型变量exp的函数。不管实际需要多少位来存储指数,它都固定使用int类型。根据文档说明:
若要存入
*exp的值超出int的范围,则行为未定义。
那么该如何检查*exp是否超出int的范围?
我考虑在代码中添加static_assert,用来比较FLT_MIN_EXP、FLT_MAX_EXP与INT_MIN、INT_MAX。但因为不完全理解这些常量的定义,担心出现差一错误。
FLT_MIN_EXP的定义:
使FLT_RADIX的(该整数减一)次幂为标准化
float的最小负整数……
FLT_MAX_EXP的定义:
使FLT_RADIX的(该整数减一)次幂为可表示有限
float的最大正整数……
(我的代码中已有static_assert(FLT_RADIX == 2);,因此无需考虑基数为10的情况。)
内容的提问来源于stack exchange,提问作者Piotr Siupa
相关产品推荐
相关产品推荐

