打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
浮点运算误差问题

#include  <stdio.h>   
 main()
 {float i;

for(i=0;i!=1;i+=0.1)

 printf("%f\n",i);
 getch();}

有这么一道非常简单的问题,在正常运算情况下的结果恐怕大家都知道的,但在程序执行的时候则会产生不同的结果而变成了一个死循环。问题在什么地方?初学者都不明所以,在这里简单的介绍一下。我们知道十进制和二进制的转化关系(小数部分):乘2取整正序排列。但我们发现在0.1此数转化的时候并不能得到一个准确的二进制数。离它最近的二进制小数是0.00011……,也就是十进制的0.099……,而计算机的存储空间是有限的,所以我们得不到准确的二进制数,程序在执行时并不是按0.1计算,而是按0.099……计算,所以永远不会出现i==1的情况,也就出现了死循环的情况。

同理看下面的程序:

 #include  <stdio.h>    
 main()
 {float a,b,c;
 a=0.99999999;
 b=1.0;
  if(a==b)
printf("ddddd");
 getch();}

在执行中,a和b的值认为是相等的,输出界面为



所以经过一系列的浮点运算或者函数运算后,一个数的准确值应该是整数却变成了小数,如1变成了0.999999999999…… 我们可以用floor(x+0.5)==x来判断一个数是否为整数(注意此整数是经过一系列的浮点运算或者函数运算后的整数)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言浮点数运算的精度问题
Java谜题系列--2
计算机基础理论:原码、反码、补码、移码
使用浮点数和小数中的技巧和陷阱
程序员应该了解的计算机知识(三)——信息表示和编码
浮点数到整数的快速转换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服