C++ 中的十进制精度错误
decimal accuracy error in c++
>我正在编写一个代码,如果可以准确翻译,则将十进制从一元转换为二进制,如果不能,则返回错误消息。以下是我的代码。我对十进制错误感到困惑。一步到位,前面的n是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 不能表示为终止二进制分数,因此会出现舍入误差。
您可以显式计算每个数字以避免错误。 要么沿着任意精度算术的思路思考,要么按照"滚动自己的"计算引擎思考。
或者,另一种选择是四舍五入到您需要的名额。 在这里,小数点后四位就足够了。
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 为什么 2 个双精度值之间的差值计算错误?
- 提升多精度浮点数128:标准::exp错误:'no matching function for call'
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- CIN 双精度和不带空格的字符串会导致错误
- 标准库to_string(双精度)在 vs2015 中给出错误的值.有什么解决办法吗?
- C++错误:从“int*”转换为“int”会失去精度
- Opengl 精度转换错误编译错误 E0415
- 使用 gcc 编译时,PowerPC 上的长双精度错误
- 在发布版本中划分两个双精度的结果错误
- 由于C++中双精度类型的准确性而导致的错误
- C++ 中的日志基础 2 精度错误
- C++ 中的十进制精度错误
- visual C++使用字符串流进行字符串到双精度转换会产生精度错误
- 解决设置精度错误的方法
- c++浮点精度错误
- 类c++中的浮点和双精度错误