我偶然发现了我无法解释的奇怪的 C++ 行为。
我试图在调整图像大小(保持其比例)以适应尽可能多的屏幕时计算图像的尺寸。x、y 变量是图像的尺寸,X、Y 变量是屏幕的尺寸。当结果维度不是整数时,我需要使用标准数学规则对它们进行舍入。
这个输入程序499999999999999999 10 1000000000000000000 19给出了(错误的)答案950000000000000000 19。
#include <iostream>
#include <cmath>
#include <algorithm>
int main()
{
long long x, y, X, Y;
std::cin >> x >> y >> X >> Y;
long double ratio = std::min((long double)X/x, (long double)Y/y);
x = round(ratio*x);
y = round(ratio*y);
std::cout << x << " " << y << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,下面的代码(仅更改并从函数体中using namespace std;删除)给出了正确的答案。std::main949999999999999998 19
#include <iostream>
#include <cmath>
#include …Run Code Online (Sandbox Code Playgroud)