- 締切済み
十進法から二進法への変換
(3.3)10を二進法に変換したいのですが、自分の答えは =(11.01001)2 になると思うのですが合ってますでしょうか? 小数部は 0.3 1×2^1+1×2^0+0×2^-1+1×2^-2 × 2 +0×2^-3+0×2^-4+1×2^-5=0.28125 0.6 × 2 打ち切り誤差は 0.3-0.28125=0.01875 1.2 × 2 0.4 × 2 0.8 × 2 1.6
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- age_momo
- ベストアンサー率52% (327/622)
少し、書き方を変えてみると 3.3=33/10(d)=100001/1010(b) ですから 11.010011・・・・・・ ___________________________________ 101) 10000.1 101 __________ 110 101 __________ 1000 101 ___________ 110 101 __________ 1 , , 循環に入ります。11.01001 以降、1001が続きます。
何桁まで求めるのかはっきりしませんが、 11.01001(2進法) → 2+1+1/4+1/32(10進法)ですので、計算自体はあってますね。 ただし、切り上げた11.0101 のほうが、3.3に近いです。 11.0101(2進法) → 2+1+1/4+1/16=3.3125(10進法) 11.0100110011001...という循環小数になるはずです。 2+1+1/4+1/32+1/64+1/512+... =3+(9/32)・1/(1-1/16) (無限等比級数の公式から) =3+(9/32)・(16/15) =3+3/10 =3.3
- banakona
- ベストアンサー率45% (222/489)
だいたい合ってますね。 既にお気づきかもしれませんが、質問者さんの作業を進め、1.6から1を引いて2倍すれば1.2が再登場します。 これにより循環小数になります。 具体的には11.01の後に0011が繰り返し出てきます。つまり 11.01001100110011・・・
- kfc_t
- ベストアンサー率13% (2/15)
Windowsのアクセサリの関数電卓で計算してよいのでしたら、次の方法が簡単です。 2進数の小数点以下何桁まで必要かによりますが、たとえば小数点以下8ビットまで求めるたいのなら関数電卓を10進数モードにし、3.3 x 256(=2^8) を計算した後、2進モードにします。 3.3 x 256 = 844.8 (10進) --> 1101001100 (2進) この2進数は256倍の値なので、2進数を1/256(つまり小数点を2進数の下から8ビット目の上に付ける)すれば答えです。 11.01001100 (2進) もっと精度が必要なら256の代わりに 65536(2^16)にすれば良いと思います。
お礼
ありがとうございます。よく分かりました。