新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 关于浮点数的小数部分计算

关于浮点数的小数部分计算

作者:时间:2016-08-02来源:网络收藏

  收到QQ上一个留言,有位网友询问我一个简单的问题。问题如下:

本文引用地址:http://www.eepw.com.cn/article/201608/294898.htm

  1111 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%f\n", sum);

  }

  我这样回答希望他明白!



关键词: 浮点数

评论


技术专区

关闭