首页 > 后端开发 > C++ > 我们如何克服浮点运算的精度问题?

我们如何克服浮点运算的精度问题?

Linda Hamilton
发布: 2024-12-01 00:22:15
原创
773 人浏览过

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

克服浮点数的精度问题

浮点数是计算中广泛使用的数据类型,由于存在潜在的精度问题它们在机器中的内在表征。为了说明这个问题:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}
登录后复制

在此代码中,str 是“4.600”的字符串表示形式,调用 atof(str) 将其转换为 double mw。随后的计算产生了一个不幸的结果:4.5999999999999996 的浮点表示形式无法精确表示所需值 4.600。

解决问题

如解决方案所突出显示,用浮点运算实现精确相等实际上是不可能的。相反,最好比较可接受范围内的值。在某些情况下,必须认识到特定值无法准确表示为浮点数。

推荐资源

有关更多见解,请参阅以下参考资料:

  • [每个计算机科学家应该了解的浮点知识算术](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [比较浮点数](https://floating-point-gui.德/)

以上是我们如何克服浮点运算的精度问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板