- ベストアンサー
2進法で小数を表す方法
2進法は自然数の足し算は簡単ですがこたえが1以下になるような割り算はどのようにして実行するのでしょうか。又1以下の数は分数で示すのは簡単でも小数で示すことは難しいのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えば10進数の世界では「0.03」を表するのに 3×10のマイナス2乗 (=3×0.01) と表現する事ができます。 これと同じ様に、2進数の世界でも 整数×2の何乗 と言う表現で小数点以下を含む数を表現する事ができます。 ほとんど全てのコンピュータは、この方式を採用しています。 「浮動小数点」と言う言葉で検索してみて下さい。
その他の回答 (2)
- aquarius_hiro
- ベストアンサー率53% (194/360)
こんにちは。 ANo.1,ANo.2でお答えが出ていますが、もう少し詳しく説明してみますね。 自然数の2進法はご存知なのですよね。 その復習から入ります。 例えば、a,b,cを0か1として、abc という2進法の数字があったとすると、これは10進法で書くと、 2^2×a + 2^1×b + 2^0×c … (1) というものです。(「^2」は右肩に2、すなわち2乗の意味。) たとえば、101という2進法の数字があったとすると、これは10進法では、 2^2×1 + 2^1×0 + 2^0×1 = 4+0+1 = 5 になります。(2の0乗は1です。) この考えを拡張すると、「.」を小数点として、 abc.def という2進法の数字は、10進法でいう 2^2×a + 2^1×b + 2^0×c + 2^{-1}×d + 2^{-2}×e + 2^{-3}×f = 2^2×a + 2^1×b + 2^0×c + (1/2^1)×d + (1/2^2)×e + (1/2^3)×f …(2) になります。例えば、2進法の 1.01 は、10進法では、 2^0×1 + (1/2^1)×0 + (1/2^2)×1 = 1 + 0 + 0.25 = 1.25 になります。このように、2進法でも小数を表現することはできます。 考えてみれば、10進法でも、nmkという数字は、 10^2×n + 10^1×m + 10^0×k というものだし、n.mkという数字は、 10^0×n + 10^{-1}×m + 10^{-2}×k ですよね。これと(1),(2)は全く同じ考え方ですね。 割り算の計算の方法は10進法でもいろいろな方法があるように、2進法でもいろいろな計算方法があると思います。(言うまでもなく、どんなやり方でも正しければ結果は一致します。)以下にその一例を示します。 例えば、2進法で 11/101 を計算するには、まず 11/101 = 0.1× 110/101…(3) と変形します。0.1×10=1なのは、2進法の世界でも成立つのは、0.1が10進法の1/2、10が10進法の2であることから明らかですね。 110=101+1なので、 (3)=0.1×(101+1)/101 = 0.1×(1+1/101) = 0.1 + 0.1×1/101 …(4) になります。 次に、1/101を計算するには、 1/101=0.001×1000/101=0.001×(101+11)/101 = 0.001×(1+11/101) + 0.001 + 0.001×11/101 故に、 (4)=0.1+0.1×0.001 + 0.01×0.001×11/101 = 0.1001 + 0.0001×11/101 以下同様に、求めたい桁まで計算できます。 > 少数を含んだ場合に10進法のほうが四則演算がやりやすいように思うのは単に慣れだけの問題なのでしょうか。 10進法も2進法も、原理的には同じで、数学的な構造は全く同じですので、10進法のときに使った計算の考え方や手法は、2進法でも本質的にそのまま使えます。 ただ、使える数字の個数が、10進法だと10個、2進法だと2個なので、その意味で、便利かどうかはあると思います。2進法だと、小さい数字を表わすのでも、やたら桁が多くなってしまいます。 また、割り算などを計算するときには、約数の数が多いほうが便利な意味もありますので、10進法で、10=2×5なのは、計算の約に立ちます。その意味では、生身の人間が扱うには、10進法よりも、12進法のほうが約数が2,3,4,6と豊富で大変便利だろうという説があります。 その反面、2進法では10進法の九九に相当するものが、1×1=1 しかありませんので、覚えるものが少なくて便利ですね(笑)
お礼
ご丁寧なご教示をありがとうございます。普段行なっている計算の意味も2進法と比べて考えてみると理解できるのだろうと思いました。勉強させていただきます。
- ymmasayan
- ベストアンサー率30% (2593/8599)
浮動小数点に行く前に小数つきの固定小数点を勉強した方がいいです。 例えば1010.1011 なら 8+2+0.5+0.125+0.0625です。 2^nをn<0迄拡張すればそうなります。 割り算は10進数と同じように引いてはずらし引いてはずらしという同じ方法を使います。
お礼
御教示いただきありがとうございます。少数を含んだ場合に10進法のほうが四則演算がやりやすいように思うのは単に慣れだけの問題なのでしょうか。
お礼
御教示ありがとうございました。2進法というのもすべてが簡単ではないわけですね。