Представление числа с плавающей точкой

Все вопросы можно задавать по адресу staroverovvl@yandex.ru
В качестве программы, работающей с бинарными операциями, приведем пример программы, показывающей битовое представление вещественных чисел, являющихся степенью двойки.


void PrintBitsF(float v)
{int b,i,j,k=0;
 for(i=3;i>=0;i--)
  for(j=7;j>=0;j--)
  {
   b=(((((unsigned char*)&v)[i])&(1<<j))?1:0);
   printf("%1.1d",b);
   if(k==0||k==8)printf(" ");
   k++;
  }
}

void PrintBitsD(double v)
{int b,i,j,k=0;
 for(i=7;>=0;i--)
  for(j=7;>=0;j--)
  {
   b=(((((unsigned char*)&v)[i])&(1<<j))?1:0);
   printf("%1.1d",b);
   if(k==0||k==11)printf(" ");
   k++;
  }
}


int main(int argc,const char **argv)
{
 {float v=1,v1;int i=sizeof(1.f+v);
 printf("sizeof(1.f+v)=%d\n",i);
  for(i=0;i<153;i++)
  {
   printf("%5d:%15g ",i,v);
   PrintBitsF(v);
   v1=1.f+v;
   printf("                   1%s1+v    1%s1+v    ",(v1==1.f?"==":"!="),(1.f+v==1.f?"==":"!="));
   printf("\n");
   v/=2;
  }
  printf("Press ENTER...");getchar();
 }
 {double v=1,v1;int i=sizeof(long double);
  for(i=0;i<1076;i++)
  {
   if(i<59||i>1000)
   {
   printf("%5d:%15lg ",i,v);
   PrintBitsD(v);
   v1=1.f+v;
   printf("                   1%s1+v    1%s1+v    ",(v1==1.f?"==":"!="),(v+1.f==1.f?"==":"!="));
   printf("\n");
   }
   v/=2;
  }
  printf("Press ENTER...");getchar();
 }
return 0;
}