关于浮点数的小数部分计算
收到QQ上一个留言,有位网友询问我一个简单的问题。问题如下:
本文引用地址:http://www.eepw.com.cn/article/201608/294898.htm1111 011. 1 0001 1110 1011 1000=123.559998,小数点后是怎么计算的呢?谢谢您!
很明显1111 011. 1 0001 1110 1011 1000是一个二进制数。整数部分当然好计算,将每位的权值加起来即可。这位网友询问的是小数部分的计算方法。其实也非常简单。
0.10001111010111000=2^(-1)+2^(-5)+2^(-6)+2^(-7)+2^(-8)+2^(-10)+2^(-12)+2^(-13)+2^(-14)=0.559998
这个可以通过计算器来计算。但是小数后位数太多,容易出错。我们可以编写一段简单的代码来计算。代码如下:
#include
#include
char a[]="10001111010111000";
void main( )
{
unsigned char i;
double sum =0.0;
printf("sum=");
for( i =0 ; i< sizeof(a); i++)
{
if( a[i] =='1')
{
sum = sum + pow(2,-(i+1));
printf("+2^(%d)",-(i+1));
}
}
printf("n%fn", sum);
}
我这样回答希望他明白!
评论