gpt4 book ai didi

C++ 程序在不同的计算机上给出不同的结果

转载 作者:太空狗 更新时间:2023-10-29 22:59:13 26 4
gpt4 key购买 nike

我的代码为输入 100 打印 192(这是期望的结果)。但是当我在online judge上提交的时候,它显示我的程序输入100的输出是190。我在ideone.com复制并粘贴代码,输入100得到结果192。我把它发给我的 friend 在他的 PC 上输出是 190。但他也将代码提交到 ideone.com 并得到了 192。有什么问题吗?这是我的代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long int lli;

int main(){
lli in,ans = 0;
cin >> in;

if(in < 10)
cout << in << endl;
else{
lli digits = 0;
lli temp = in;
while(temp > 0){
digits++;
temp /= 10;
}
digits--;

while(in > 0){
//cout << "in: " << in << endl;
//cout << "digits: " << digits << endl;

ans += ((in - (pow(10,digits) - 1)) * (digits + 1));
in = in - (in - (pow(10,digits) - 1));
digits--;

if(in == 9){
ans+= 9;
break;
}
}
cout << ans << endl;
}
}

ideone 链接:http://ideone.com/zOvHzW

为什么会这样?我知道这可能是编译器问题,但这里到底发生了什么?

最佳答案

问题是 std::pow 不准确。它是一种近似算法。它返回的浮点结果可能会有一些非常小的偏差。

当您将 float 转换为整数时,您需要通过移除小数部分来向下舍入。但是,如果正确的结果是 100,而错误是 -0.000...001,因此结果是 99.999...999 然后你去掉小数部分,那么你得到的整数就是 99。

std::pow 是如何实现的……特定于实现者。因此,错误可能在一个编译器/计算机中是一种方式,但在另一种方式中是另一种方式。这就是结果可能不同的原因。

解决方案:不要使用std::pow 进行整数计算。

解决方法:先将结果四舍五入为最接近的整数。

关于C++ 程序在不同的计算机上给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37733105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com