Код:
#include <stdio.h>
void main(void)
{
unsigned short O1, O2;
short exp;
unsigned long mant, scmant;
long double res, sres;
while (1)
{
printf("#>");
scanf("%ho %ho", &O1, &O2);
printf("%ho %ho\n", O1, O2);
mant = ((((unsigned long)O1 << 16) | O2) & 0x7FFFFFL) | 0x800000L;
exp = (O1 >> 7) & 0xFF; exp -= 128;
printf("%hi %lX\n", exp, mant);
scmant = 0x800000L; sres = 0.5; res = 0.0;
while (scmant != 0)
{
if ((scmant & mant) != 0) res += sres;
scmant >>= 1; sres /= 2;
}
while (exp != 0)
{
if (exp < 0)
{
res /= 2; exp++;
}
else
{
res *= 2; exp--;
}
}
if ((O1 & 0x8000) != 0) res = -res;
printf("%Lg\n",res);
}
}