C++ 检查输入浮点数(-0.0f、+0.0f)

C++ check input floats (-0.0f, +0.0f)

提问人:A02 提问时间:11/22/2022 最后编辑:A02 更新时间:11/22/2022 访问量:147

问:

我目前正在尝试构建一个程序,该程序将输入浮点值打印为二进制。

如果为正,则第一位为 0,如果为负,则为 1,但输入值为:-0.0g 我的 if 语句始终打印 1,对于正输入也是如此。我该如何正确检查?

string sign = "sign: ";
if(value <= -0.0f)
 sign.append("1\n");
else if (value >= 0.0f)
 sign.append("0\n");

...

C++ 浮点 二进制

评论

4赞 john 11/22/2022
简单的方法,使用 signbit 函数。
2赞 kotatsuyaki 11/22/2022
cppreference 上的 std::signbit
0赞 ChrisMM 11/22/2022
请注意,在 IEEE 754 中,负零是有效值。
3赞 MSalters 11/22/2022
@ChrisMM:更重要的是,在IEEE754正零和负零是相等的。这就是为什么代码失败是真的,因为+0.0f <= -0.0f+0.0f == -0.0f

答:

1赞 chux - Reinstate Monica 11/22/2022 #1

+0.0 和 -0.0 具有相同的值,但符号不同。

value <= -0.0f对于 +0.0 和 -0.0 为 true。@MSaltersvalue

要区分符号,请使用 .@johnstd::signbit()

if(std::signbit(value)) {
  sign.append("1\n");
} else {
  sign.append("0\n");
}

请注意,这也适用于无穷大和 NaN。signbit()


尽管 std::signbit 报告“与 一起,是检查 NaN 符号的仅有的两种可移植方法之一”,但可能还有其他方法std::copysignstd::signbit