#include const double A = 12; const int n_int = 4; // 整数部の桁数 const int n_decimal = 4; // 小数部の有効桁数 void convert_int( const int A, const int n ) { printf("桁数: %d\n", n ); printf("10進数: %d\n", A ); printf("2 進数: 0b"); for(int i=n-1;i>=0;--i) putchar('0'+((A&(1<0)); printf("\n"); printf("16進数: 0x"); for(int i=n-4;i>=0;i-=4) printf("%X", (A>>i)&15); printf("\n"); } double convert_decimal( const double A, const int n ) { printf("有効桁数: %d\n", n ); printf("10進数: %lf\n", A); double tmpA = A; int out = 0; for(int i=0; i= 0; --i) putchar('0'+((out&(1<0)); printf("\n"); printf("16進数: 0x%X\n",out); double result = 0; for(int i=n-1; i>=0; result+=1.0/(2<<(n-1-i))*((out&(1<0),--i); return result; } void convert(const double A, const int n_int, const int n_decimal = 4) { if( A-(int)A != 0 ){ double out = (int)A; if( out != 0 ){ printf("A=%lf\n",A); printf("\n[整数部]\n"); convert_int((int)A,n_int); printf("\n[小数部]\n"); } out += convert_decimal(A-(int)A,n_decimal); printf("\n再計算した10進数: %lf\n", out ); printf("丸め誤差: %lf\n", out-A ); } else{ convert_int((int)A,n_int); } } int main() { convert(A,n_int,n_decimal); }