二进制小数转换为十进制的误差问题

[复制链接]
查看11 | 回复2 | 2009-10-17 00:29:13 | 显示全部楼层 |阅读模式
#include#includeint main(){
doublex = 0.706;
int num[15];
for(int i=0;i<10;i++)
{
x = x*2;
// 每次乘以2
num= int (x);
// 取整
x -= num;
// 减去已经算出的,继续算小数部分
}
printf("0.");
for(int i=0;i<10;i++) printf("%d",num);
puts("");
system("pause");}实际上能求出n位2进制的小数,但是这里我求出了10位,所以误差小于2^-10
回复

使用道具 举报

千问 | 2009-10-17 00:29:13 | 显示全部楼层
后一次减前一次的值,不大于2^-10具体没算过
回复

使用道具 举报

千问 | 2009-10-17 00:29:13 | 显示全部楼层
楼上给出的算法可以。误差指与实际值的差值的绝对值。。。已经算出10位的话,必然误差小于2^-10另外如果是迭代算的话,只需要最后两次计算出来的差值不大于2^-10(跟一楼一样),具体原因我也有点迷糊,貌似可以推导一下的。当然前提是算法必须收敛。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行