c++ 为什么ceil函数在这种情况下不返回整数?[已关闭]

lawou6xi  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(186)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
5天前关闭。
Improve this question
我只是做了一些编码,其中涉及到Ceil函数,当然是为了得到整数。但当涉及到大量的函数返回实数!例如:
输入:
12345678一
输出:
8.72971e +06

#include<iostream>
#include<cmath>

using std::cin;
using std::cout;
using std::ceil;
using std::sqrt;

long long a, b;
int r;

int main() {
    cin >> a >> b >> r; 
    cout << ceil((sqrt(a * a + b * b)) / (2 * r));
}

对此有何解释?

zbdgwd5y

zbdgwd5y1#

ceil()返回一个浮点结果,正如@Eljay在注解中指出的,如果你想要ceil(x)的整数部分,你应该将结果强制转换为整数,如下所示:

#include <cmath>
#include <iostream>

int main() {
    long long a = 12345678;
    long long b = 12345678;
    int r = 1;

    std::cout << static_cast<long long>(ceil((sqrt(a * a + b * b)) / (2 * r)));
}

打印出正确的结果:

8729713

您可以在这里使用代码:https://godbolt.org/z/1fY59Ex5z

相关问题