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

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:56:14
例如将(0.706)D 转换为二进制数,要求其“误差不大于2的-10次方”。
请注意打双引号部分即我不明白的地方,怎么判断这个误差?怎么知道的?
望高手能现给出此题答案再解释!谢谢!

#include<stdio.h>
#include<stdlib.h>
int main()
{
double x = 0.706;
int num[15];
for(int i=0;i<10;i++)
{
x = x*2; // 每次乘以2
num[i]= int (x); // 取整
x -= num[i]; // 减去已经算出的,继续算小数部分
}
printf("0.");
for(int i=0;i<10;i++) printf("%d",num[i]);
puts("");
system("pause");
}

实际上能求出n位2进制的小数,但是这里我求出了10位,所以误差小于2^-10

楼上给出的算法可以。

误差指与实际值的差值的绝对值。。。已经算出10位的话,必然误差小于2^-10

另外如果是迭代算的话,只需要最后两次计算出来的差值不大于2^-10(跟一楼一样),具体原因我也有点迷糊,貌似可以推导一下的。当然前提是算法必须收敛。

后一次减前一次的值,不大于2^-10
具体没算过