2 進数 ( )で表される1101.11
浮動小数点数を10 進数 ( )に変換するプログラムを C で作成しました13.75
。
ただし、アルゴリズムから正しい値を取得できないようです。
2 進浮動小数点数を 10 進数に変換する正しい方法は何ですか?
Dev CPP コンパイラ (32 ビット) を使用しています。アルゴリズムは次のように定義されています。
void b2d(double p, double q )
{
double rem, dec=0, main, f, i, t=0;
/* integer part operation */
while ( p >= 1 )
{
rem = (int)fmod(p, 10);
p = (int)(p / 10);
dec = dec + rem * pow(2, t);
t++;
}
/* fractional part operation */
t = 1; //assigning '1' to use 't' in new operation
while( q > 0 )
{
main = q * 10;
q = modf(main, &i); //extration of frational part(q) and integer part(i)
dec = dec+i*pow(2, -t);
t++;
}
printf("\nthe decimal value=%lf\n",dec); //prints the final output
}
int main()
{
double bin, a, f;
printf("Enter binary number to convert:\n");
scanf("%lf",&bin);
/* separation of integer part and decimal part */
a = (int)bin;
f = bin - a;
b2d(a, f); // function calling for conversion
getch();
return 0;
}