首页 > 解决方案 > 如何确保浮点值不越界?

问题描述

我有以下代码:

float numb = 0.00f;
if (numb < FLT_MIN || numb > FLT_MAX)
    printf("NOT Valid");
else
    printf("Valid");

在这种情况下,为什么0.00f无效?

标签: c

解决方案


FLT_MIN就像a(标准化)可能具有的最小正值。float在今天的平台上,它略高于 0:

FLT_MIN = 1/2^126 = 0.00000000000000000000000000000000000001175494350822

因为0比较小FLT_MINnumb < 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的次常数也不在这个范围内。


推荐阅读