经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 计算机原理 » 查看文章
为什么计算机对浮点型数字计算存在误差
来源:cnblogs  作者:廊虞  时间:2023/4/12 11:15:58  对本文有异议

为什么计算机对浮点型数字计算存在误差?

我们输入的十进制小数在计算机中都是以二进制进行存储。比如:

  1. 我们把0.25转换为二进制
  2. 0.25 * 2 = 0.5 0
  3. 0.50 * 2 = 1.0 1
  4. 所以十进制0.25的二进制应当为0.01
  5. 但是我们把0.3转换为二进制存储
  6. 0.3 * 2 = 0.6 0
  7. 0.6 * 2 = 1.2 1
  8. 0.2 * 2 = 0.4 0
  9. 0.4 * 2 = 0.8 0
  10. 0.8 * 2 = 1.6 1
  11. 0.6 * 2 = 1.2 1
  12. 0.2 * 2 = 0.4 0
  13. ......
  14. 所以十进制0.3的转为二进制应当为0.01001100110011的无限循环小数。

由此可见0.3在计算机中存储的值永远小于0.3,所以当使用0.3计算时,就会产生误差。

在计算机中浮点型不能直接使用等号比较也是同一个道理。举个李子:

  1. #include<stdio.h>
  2. void comp(double a, double b){
  3. printf("两个数:a = %g, b = %g 开始比较\n", a, b);
  4. if(a == b){
  5. printf("a equal b\n");
  6. }
  7. else{
  8. printf("a not equal b\n");
  9. printf("a - b = %g\n", a - b);
  10. }
  11. }
  12. int main(){
  13. comp(0.25 + 0.25 + 0.25 + 0.25, 1.0);
  14. comp(0.3 + 0.3, 0.6);
  15. comp(0.3 + 0.3 + 0.3 + 0.1, 1);
  16. return 0;
  17. }

执行结果:

img

可以看出当涉及到0.3的运算超出一定的精度后,就会计算错误。

这就是为什么浮点型运算在计算机中会存在误差的原因。

原文链接:https://www.cnblogs.com/cnlangyu/p/17308308.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号