gpt4 book ai didi

c++ - C++中的小数精度错误

转载 作者:行者123 更新时间:2023-11-30 04:12:48 25 4
gpt4 key购买 nike

我正在编写代码,如果可以准确翻译,则将十进制从一进制转换为二进制,如果不能,则返回错误消息。以下是我的代码。我对十进制错误感到困惑。一步中n before为1.12,temp为1,但输出为0.12001,如何避免这种错误?

list<bool> binary_decimal(double n, bool& flag){
list<bool> li;
list<double> left;
flag = true;
n = n - (int)n;
left.push_back(n);
while(n){
n = n * 2;
cout << "n before " << n << endl; //test area
li.push_back(n >= 1);
int temp = (int)n;
cout << "temp " << temp << endl; // test area
n = n - temp;
cout << "n now = " << n << endl; //test area
for(list<double>:: iterator it = left.begin(); it != left.end(); it++){
if(*it == n){
cout << "error!";
flag = false;
return li;
}
}
left.push_back(n);
}
return li;
}

最佳答案

欢迎使用浮点舍入错误!

数字 0.12 不能表示为终止二进制分数,因此会出现舍入误差。

您可以明确计算每个数字以避免错误。沿着任意精度算法或“滚动你自己的”计算引擎思考。

或者,另一种选择是四舍五入到您需要的位置数。在这里,小数点后四位就足够了。

关于c++ - C++中的小数精度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688851/

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