c - 如何确保浮点值不越界?
问题描述
我有以下代码:
float numb = 0.00f;
if (numb < FLT_MIN || numb > FLT_MAX)
printf("NOT Valid");
else
printf("Valid");
在这种情况下,为什么0.00f
无效?
解决方案
FLT_MIN
就像a(标准化)可能具有的最小正值。float
在今天的平台上,它略高于 0:
FLT_MIN = 1/2^126 = 0.00000000000000000000000000000000000001175494350822
因为0
比较小FLT_MIN
,numb < FLT_MIN
是真的。
要检查 afloat
是否不是 NAN 或无穷大,我会使用isfinite():
if (isfinite(numb))
我试图确保该值在 FLT_MIN 和 FLT_MAX 之间
然后你的代码在第一个编辑是正确的。要检查变量是否在范围内,我通常会min < var && var < max
这样写,较小的位于左侧<
- 更容易阅读。
if (FLT_MIN < numb && numb < FLT_MAX)
0
比 小FLT_MIN
,所以不在这个范围内。有趣的事实:像这样FLT_MIN / 2
的次常数也不在这个范围内。
推荐阅读
- python - 根据评论查找平均分数 - python
- sql - 更新表无法修改映射到非键保留 tqbles 的列
- elasticsearch - _msearch 不返回任何内容
- java - Android Gson Retrofit 预期为 BEGIN_OBJECT,但为 NUMBER
- c++ - 我们应该在 C++17 及更高版本中使用临时的生命周期延长吗?
- c++ - 程序未按预期执行但没有编译错误
- android - 使用哪种架构来检索数据库更新
- sql - 当合并空列不合并时,刚刚插入
- c - 返回 int 数组的 Printf 函数
- java - RequestParam = false 不返回所有内容