小数点を含んだ実数の、10進数から2進数への変換のやり方がよくわかりません。できるときとできないときがあります。たとえば、

(0.1)_10 = (0.0001100110011・・・)_2

※(A)_xとは、数値Aのx進数表現というイミです。以下もこの表現を使います。

となるらしいですが、どうやればいいのでしょうか?わかりません。

また、ついでに聞いておきたいことがもう一つあります。小数点を含まない数値の
変換も教えていただきたいです。

たとえば今までぼくは、(101)_10を2進数に変換するのに、

(101)_10 = (100 + 1)_10 = ( 2^2・25 + 1 )_10

= ( 2^2・( 2^3・(2 + 1) + 1 ) +1 )_10 = (2^6 + 2^5 + 2^2 + 2^0 )_10

= (1100101)_2

などという、めんどくさいことをやっていたのですが、もっとスマートなやりかたはないでしょうか?
コンピュータもいちいちこんなやり方でやっていたら、計算量多すぎてやってられないような気がするので、きっとあると思うんですけど…簡潔なアルゴリズム…

このQ&Aに関連する最新のQ&A

A 回答 (7件)

小数の場合は、「イメージ」よりも「位取り記数法」で考えたほうが早そうです。



まず、2進数→10進数のほうが考えやすいのでこちらから。
(0.101)_2を10進数に直すといくらになるかはおわかりですか?
答えは、1*(1/2) + 0*(1/4) + 1*(1/8) = 5/8 です。

(表記として適当ではないですが)ある2進数を(0.abcdef...)_2と文字置きすると、
(0.abcdef...)_2 = a/2 + b/4 + c/8 + d/16 + e/32 + f/64 + …

この両辺をおもむろに2倍すると、右辺から考えて
a +( b/2 + c/4 + d/8 + e/16 + …) = a_2 + (0.bcdef...)_2 = (a.bcdef...)_2 です。

回りくどい説明ですが、これは「2進数では値を2倍すると位が1つずれる」という説明そのものです。

#3でwogotaさんが書かれた求め方についての解釈は次のとおりです。(ていうか文字で書いただけやけど^^;)

(0.1)_10 = (0.abcdefg...)_2とおくと、
両辺2倍 (0.2)_10=(a.bcdefg...)_2 よりa=0
両辺2倍 (0.4)_10=(b.cdefgh...)_2 よりb=0
両辺2倍 (0.8)_10=(c.defghi...)_2 よりc=0
両辺2倍 (1.6)_10=(d.efghij...)_2 よりd=1, (0.6)_10=(0.efghij...)_2
両辺2倍 (1.2)_10=(e.fghijk...)_2 よりe=1, (0.2)_10=(0.fghijk...)_2

ここで、(0.bcdefg...)_2 = (0.fghijk...)_2 より
f=b, g=c,... と循環することが読みとれます。

即ち(0.1)_10 = (0.0<0011>)_2(<0011>とは 0011 0011 0011 …と循環する、の意味)
    • good
    • 0
この回答へのお礼

こここ、これは!

まさに目からウロコデス。とってもわかりやすい回答ありがとうございましたー

お礼日時:2001/10/12 23:53

No.3のwogotaさんの回答で、あってると思います。



あえて付け加えるとすれば、
>小数点を含んだ実数の、10進数から2進数への変換のやり方がよくわかりません。できるときとできないときがあります。
とありますが、例であげている(0.1)_10 などは2進数で表せない数の代表的な一例です。
実際、コンピュータでもこれが原因で誤差が出ることがあります。

この回答への補足

※お礼の欄の後記

0.00000001490… → 0.10000001490… のマチガイでした。

補足日時:2001/10/12 00:40
    • good
    • 0
この回答へのお礼

ありがとうございました。

>コンピュータでもこれが原因で誤差が出ることがあります。
試してみました。0.00000001490…みたいになりました。

P.S.
もし暇で、かつやる気になってくれたら、#3の方が紹介してくれた小数点を含んだ数値の変換アルゴリズムの説明をおねがいします。

お礼日時:2001/10/12 00:39

整数値の変換について、皆さんがすでに書かれている導出式の「イメージ」を極めて俗っぽくかくとこんな感じです。



2進数の世界の人達は、1円玉が2枚たまると2円玉1枚と交換できます。(次の位に進むということ)
同様に2円玉2枚で4円玉に、4円玉2枚で8円玉に。。。となります。

よって、1円玉101枚を持っている状態から、
101÷2=50余り1 によって、2円玉50枚と1円玉1枚
50÷2=25余り0によって、50枚ある2円玉が4円玉25枚に。
とやっていくと、64円、32円、4円、1円玉が1枚ずつになる。
これを2進数の世界では、(1100101)_2と書く、という感じです。

余りを逆に並べるとよいというのは、こんな仕組みを押さえておけば、詰め込み暗記にはならなくてよいと思います。

小数点の数値については。。。俗っぽい表現は難しいですなぁ。^^;
    • good
    • 1
この回答へのお礼

うまいっっ!
スバラシク解りやすかったです。ありがとうございました。

小数点を含んだ数値はどう理解すればいいんですかね...
とりあえず、kony0さんが整数値について説明してくれたアイディアの
方面から自分でもアプローチしてみますけど、今ちょっと考えた限りではとりあえず解らないので、暇でかつ、やる気になってくれたらお願いします。

お礼日時:2001/10/12 00:15

No.#2のRIO-Freakです。



『10進数and2進数』で検索したら、小数の変換法が載っていました。見てみてください。

参考URL:http://cuvier.center.osakafu-u.ac.jp/lecture99/l …
    • good
    • 0

題にあるように、101_10について考えてみましょう。


101=1×10^2+0×10^1+1×10^0
(^は、べき乗とします。つまり、10^2=10×10=100)
というように、数字を分解できます。
また、これらの数字を1つずつ求めるとした場合、
101÷10=10余り1
10÷10=1余り0
1÷10=0余り1
というように、考えることが出来ます。(この方法は、後述の考え方を
逆さにしているだけだったりします。)

ということで、割る数を2にすると、余りの数字から2進数に出来ます。
101÷2=50余り1
50÷2=25余り0
25÷2=12余り1
12÷2=6余り0
6÷2=3余り0
3÷2=1余り1
1÷2=0余り1
から、101_10=1100101_2となります。
小数点では、割る数ではなく掛ける形で表示できます。
0.1_10を例にしましょう。
0.1×2=0.2(1以下ということで0)
0.2×2=0.4(1以下ということで0)
0.4×2=0.8(1以下ということで0)
0.8×2=1.6(1以上なので、1。1.6-1=0.6)
0.6×2=1.2(1以上なので、1。1.2-1=0.2)
と言う風に、0を1つおいて"0011"の列が循環する表示になります。
よって、0.1_10=0.0001100110011・・・_2となります。

かなり、直感を重視した内容になっていますので、理論的な説明が必要ですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

整数値については、#5の方の説明で理解できたのですが、
小数点を含んだ数値のやり方が理解できません。
できれば説明お願いします。

お礼日時:2001/10/12 00:19

小数点を含んだ実数の変換は、専門外なのでよくわかりませんが、10進数の整数を2進数に変換する場合には、



101÷2=50 余り 1 (1)_2
50÷2=25 余り 0 (01)_2
25÷2=12 余り 1 (101)_2
12÷2=6 余り 0 (0101)_2
6÷2=3 余り 0 (00101)_2
3÷2=1 余り 1 (100101)_2
1÷2=0 余り 1 (1100101)_2

というように、2で割っていって、余りを下の位から順に立てていきます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

こんなやり方があったのですね。

お礼日時:2001/10/12 00:22

一応コンピュータ屋です。



コンピュータの中では、2進法が先です。

つまり2進数にあわせて、人に優しい10進表記をしているのです。

とりあえずコンピュータの中の話でした。

ではでは。
    • good
    • 0
この回答へのお礼

回答?ありがとうございました。

あ、そうか。10進数で数値を入力、また表示するときは、わざわざ計算などしなくても1対1に対応(2進数値と10進数値が)してるからいい、というコトですか?

お礼日時:2001/10/12 00:28

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QF_n=(a+b+c)^(2n+1)-{a^(2n+1)+b^(2n+1)+c^(2n+1)} の因数分解

F_n=(a+b+c)^(2n+1)-{a^(2n+1)+b^(2n+1)+c^(2n+1)} 
(n=1,2,3,4,5)
を因数分解せよ、という問題なのですが、どすればよいのでしょうか?

なお、答えは、

F_1=3(b+c)(c+a)(a+b)
F_2=5(b+c)(c+a)(a+b)(Σa^2+Σab)
F_3=7(b+c)(c+a)(a+b)(Σa^4+2Σa^3 b+3Σa^2 b^2+5Σa^2 bc)
F_4=3(b+c)(c+a)(a+b)(3Σa^6+9Σa^5 b+19Σa^4 b^2+35Σa^4 bc+23Σa^3 b^3+63Σa^3 b^2 c)
F_5=11(b+c)(c+a)(a+b)(Σa^8+4Σa^7 b+11Σa^6 b^2+21Σa^6 bc+9Σa^5 b^3+54Σa^5 b^2 c+23Σa^4 b^4+84Σa^4 b^3 c+123Σa^4 b^2 c^2+159Σa^3 b^3 c^2)

のようなのですが、(b+c)(c+a)(a+b)を因数に持つことは分かりますが、残りの因数はどうやってもとめるのでしょうか?

一文字を変数と見て、地道に割り算するしかないのでしょうか?
効率的な計算方法はありますでしょうか?

F_n=(a+b+c)^(2n+1)-{a^(2n+1)+b^(2n+1)+c^(2n+1)} 
(n=1,2,3,4,5)
を因数分解せよ、という問題なのですが、どすればよいのでしょうか?

なお、答えは、

F_1=3(b+c)(c+a)(a+b)
F_2=5(b+c)(c+a)(a+b)(Σa^2+Σab)
F_3=7(b+c)(c+a)(a+b)(Σa^4+2Σa^3 b+3Σa^2 b^2+5Σa^2 bc)
F_4=3(b+c)(c+a)(a+b)(3Σa^6+9Σa^5 b+19Σa^4 b^2+35Σa^4 bc+23Σa^3 b^3+63Σa^3 b^2 c)
F_5=11(b+c)(c+a)(a+b)(Σa^8+4Σa^7 b+11Σa^6 b^2+21Σa^6 bc+9Σa^5 b^3+54Σa^5 b^2 c+23Σa^4 b^4+84Σa^4 b^3 c+123Σa^4 b^2 c^2+159Σa^3 b^3 c^...続きを読む

Aベストアンサー

最後までは計算していませんが、次の方法でできそうです。
F_n = (b+c)(c+a)(a+b)(Σ[ABC] k_ABC a^A b^B c^C) とおきます。
(ここで、A+B+C = 2n+1 です。)
展開すると、F_n = (a^2 b + 略 + 2abc)(Σ[ABC] k_ABC a^A b^B c^C) です。
そして、F_n を例えば、a で A+2 回偏微分、a で B+1 回偏微分、
a で C 回偏微分、した後、a,b,c に 0 を代入します。
F_n=(a+b+c)^(2n+1)-{a^(2n+1)+b^(2n+1)+c^(2n+1)} に対しても同じようにします。
このようにすると、例えば C > 0 であれば、
k_ABC (A+2)!(B+1)!(C)! = (2n+1)! となり、係数が得られます。

Q【問題】f(x)=x^4+2x^3+10x^2+(10-2√2)x+2

【問題】f(x)=x^4+2x^3+10x^2+(10-2√2)x+23とする。実数αに対して, f(x)をx^2+αで割ったときのあまりを求めよ。このことを用いてf(x)を実数の範囲で因数分解せよ。

あまりを(10-2√2-2α)x-α(10-α)+23と求めたのですが…
ここからこれをどうすればいいのかわかりません^^;
あまりを0とおくのかと試みたのですが…

どなたか教えてください。
よろしくお願いします!

Aベストアンサー

>あまりを(10-2√2-2α)x-α(10-α)+23と求めたのですが…
>ここからこれをどうすればいいのかわかりません^^;
>あまりを0とおくのかと試みたのですが…
そのやり方で良いですよ。
xの係数=0とおいて、αを求めて下さい。
そのαを定数項に代入すると定数項もゼロになります。

そうすると、そのαに対して、
f(x)は(x^2+α)で割れますので、商をQ(x)の式にαを代入すれば
f(x)=Q(x)(x^2+α)
の形に因数分解できたことになります。
Q(x)は2次式ですから、2次方程式の判別式Dで調べると分かると思いますが
D<0になるので実数の範囲では因数分解できないでしょう。

Q「(5x+3)^10でx^pとx^(p+1)の係数比が21:20になる時のpの値」と「x+y=1を満たす全x,yに対してax^2+2bxy+by^2

こんにちは。識者の皆様、宜しくお願い致します。

[問1] (5x+3)^10の展開式でx^pとx^(p+1)の係数比が21:20になる時のpの値を求めよ。
[問2]x+y=1を満たす全てのx,yに対して
ax^2+2bxy+by^2+cx+y+2=0が成立するように定数a,b,cの値を定めよ。

[1の解]
(5x+3)^10=10Σk=0[(10-k)Ck 5x^(10-k)3^k]なので
p=10-kの時(k=10-pの時)
p+1=10-kの時(k=9-pの時)より
a:b=pC(10-p) 5^p 3^(10-p):(1+p)C(9-p) 5^(1+p) 3^(9-p)
で 1/(10-p):(1+p)/(2p-8)/(2p-9)=7:4 から
23p^3-199p+218=0
となったのですがこれを解いてもp=6(予想される解)が出ません。
やり方が違うのでしょうか?

[2の解]
与式をx+yという対称式で表せばならないと思います(多分)。
どうすれば対称式で表せるのでしょうか?

Aベストアンサー

 (1)Cをばらして比を簡略化するところで計算間違いがありそうな気がします。その経過をもう少し詳しく書いてもらえませんか?
 (2)a,b,cを求めるにはまず、x+y=1 を満たすすべての(x,y)で成り立つのですから、x+y=1を満たす(x,y)をまず代入してみてはどうでしょうか。候補としては、(1,0)(0,1)(2,-1)など。
 それから計算されたa,b,c でx+y=1を満たすすべてのx,yで成り立つかどうかを確認するという手順でどうでしょうか?

Qny^2=x^3+ax^2+bx+c上の点全体とy^2=x^3+anx

ny^2=x^3+ax^2+bx+c上の点全体とy^2=x^3+anx^2+bn^2x+cn^3上の点全体の間の1対1対応を与える簡潔な変数の1次変換を求めるという問題が解けなくて困っています。yをy/n^2に、xをx/nに置き換えよ、とヒントには書いてあるのですが…
解き方がわかる方はぜひ教えてください。

Aベストアンサー

>yをy/n^2に、xをx/nに置き換えよ、

 ここまで分かっているのですから、これを行列で表せばよいのではないですか。

(1/n 0)
(0 1/n^2)

Q線形です (1)を x+3y-2z=0 x-2y+4z=0 x^2+y^2+z^2=1をもちいて 答

線形です
(1)を
x+3y-2z=0
x-2y+4z=0
x^2+y^2+z^2=1をもちいて
答えが+-の答えになりました
(2)では外せきが8,-6,-5となり
おおきさの5ルート5で割ると
+-の答えにはなりませんでした
どちらが正しいのでしょうか?

Aベストアンサー

外積からでてきた単位べクトルは、外積の定義から、ベクトルa、bに垂直ですよね。
だからそれと正反対のベクトルも、ベクトルa、bに垂直な単位ベクトルだから、これも答えに入れれば
よいのです。つまり外積から出した単位ベクトルの各成分に(-1)をかけた成分のベクトルも答えに
なります。そしてこうして出した2つのベクトルは、先に内積で出した2つのベクトルと一致します。


人気Q&Aランキング

おすすめ情報