什么情况下 ceil(x-0.5) != Floor(x+0.5)

问题描述 投票:0回答:1

根据 cppreference round 的行为如下

double round(double x)
{
    return signbit(x) ? ceil(x - 0.5) : floor(x + 0.5);
}

我想知道

ceil(x - 0.5)
floor(x + 0.5)
有什么区别?

看起来他们的行为是平等的:

x = -0.1;
ceil(-0.1 - 0.5) => 0
floor(-0.1 + 0.5) => 0

x = -0.8;
ceil(-0.8 - 0.5) => -1
floor(-0.8 + 0.5) => -1

结果好像是一样的

c++ c floating-point rounding fpu
1个回答
0
投票

除了操作本身的不同之外,没有太大的区别。选择最适合使用 x 的上下文的一项。除非您使用大于 1 的数字进行运算,否则两者实际上不会有所不同,此时变量量将足够大以创建不同的输出。

© www.soinside.com 2019 - 2024. All rights reserved.