提问人:A02 提问时间:11/22/2022 最后编辑:A02 更新时间:11/22/2022 访问量:147
C++ 检查输入浮点数(-0.0f、+0.0f)
C++ check input floats (-0.0f, +0.0f)
问:
我目前正在尝试构建一个程序,该程序将输入浮点值打印为二进制。
如果为正,则第一位为 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");
...
答:
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::copysign
std::signbit
评论
cppreference 上的 std::signbit
+0.0f <= -0.0f
+0.0f == -0.0f