忍者ブログ
20080511~ 13と7と11の倍数の論理積は13と7と11の積の倍数である。 和ァ・・・
[446] [445] [444] [443] [442] [441] [440] [439] [438] [437] [436]
前回のあらすじ

細かすぎて伝わらない一発芸をやったきのこはふと思い出した。
2進数にした8÷5はいつまでたっても割り切れないのであった。
きのこはその答えを探す旅に出るために布団にもぐった。


==========


8を2進数にすると1000
5を2進数にすると101
8÷5を2進数で行うと、
1000÷101=1.10011001100・・・
といつまで経っても割り切れない。
10進数のときと何が違うかといえば、2進数になったことしかない。
ということは原因は2進数にある。
10進数と2進数の違いは何か。
約数の違いである。
10の約数は2と5
一方、2の約数は2だけ。
5が入っていないのである。


つまり、10や100や1000などを3や9で割っても割り切れないように
2進数における2や4や8を5や25や125で割っても10進法とは違い、割り切れないのである。


では逆に、約数の多い数を進数に使うとどうなるか?
ご存知1mの棒状ケーキを3人で分けようとすると33.333・・・cmで割り切れないが、
丸いケーキであれば、きっかり120度ずつに分けることができる。
これは、1周を360度という約数の多い進数で数えているからである。
同様に、1時間は6分で割ると10個と、割り切れる。



しかし、約数を求める際にも割り算を行っている。
割り算を行ってあまりが出なければそれを約数としている。
では、進数の違いによって約数の数が違ってくることはないのだろうか?



このような心配を、20歳のときに漠然と考えていたが
どういう疑問なのかこないだまでよくわかっていなかった。

しかしどうやら心配は無用のようで、進数の違いによって同じ数でも約数が異なるなんてことにはならないような気がする。



60は2進数においても10進数においても8進数においても2×2×3×5であることに揺らぎはないからだ。


証明とは程遠いが、ためしにやってみると
10進数  2進数      8進数   5進数
2     10        2     2
3     11        3     3
5     101       5     10
60    111100    74   220


2進数では(隣は対応する10進数計算)
 10    2
×10   ×2
___ __
100    4

 100     4
× 11    ×3
____ __
 100    12
100
____
1100

  1100     12
 × 101    × 5
 _____ ___
  1100     60
1100
______
111100



8進数では(隣は対応する10進数計算)

 2    2
×2   ×2
__ __
 4    4

 4    4
×3   ×3
__ __
14   12


 14    12
× 5   × 5
___ ___
 74    60



5進数では(隣は対応する10進数計算)
 2    2
×2   ×2
__ __
 4    4

 4    4
×3   ×3
__ __
22   12

 22   12
× 5   ×5
___ __
220   60




ところで、10進数で1を3で割ると1/3であり、
1/3を3回足すと1になるはずだが
1/3≒0.33・・・と小数にしたとたん
3回足した合計が0.99・・・となり、1にはならない

同様のことがコンピュータの中でも起きており
0.1を10回足したら当然のように1になると僕らは思っていても
2進数で表現すると1÷1010=0.00011001100・・・
になるので10回足しても0.11111111・・・にしかならず、1にはならないのである。
これは、0に10回0.1を足すのであればさほど問題にはならないが
1から10回0.1を引いて0になっているかどうか判定するようなことをしたとして、ここで2進数の桁が8桁しか用意されていないと
0と0.0000001の違いになってしまい
これは10進数にすると0と約0.008の違いになり、たちまち問題は大きくなってしまうのである。

もちろんコンピュータは桁数は多くても有限の桁しか持っていないので、この差はいつでも付きまとう。
また、1を10等分して1から10回引くだけならいいが
1を100等分して1から100回引いたり、1を1000等分して1から1000回引いたりしたら、この0とはもっと大きくかけ離れてしまう。



このようなことを避けるために、必要に応じて時々
10から10回1を引いてそれぞれを0.1倍するとか
1000から1000回1を引いてそれぞれを1/1000するとかそういうことを行ったりする。
これなら確実にきっかり0になる。


もし、どうしてもこのような回避方法をとれない場合は、
0から±このくらいだけの範囲内に収まっているかどうか、という判定に変えなければならない。
「このくらい」は自分で見積もるのである。



にほんブログ村 科学ブログ 自然科学へ
にほんブログ村

拍手[4回]

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログランキング
ブログランキング参戦中
にほんブログ村 アニメブログ 深夜アニメへ
にほんブログ村 漫画ブログ SF・ファンタジー漫画へ
にほんブログ村 科学ブログ 自然科学へ
よかったらポチッとお願いします^^
最新CM
[12/30 buy steroids credit card]
[09/26 Rositawok]
[03/24 hydraTep]
[03/18 Thomaniveigo]
[03/17 Robertaverm]
最新TB
プロフィール
HN:
量子きのこ
年齢:
43
性別:
男性
誕生日:
1981/04/04
職業:
WinDOS.N臣T
趣味:
妄想・計算・測定・アニメ
自己紹介:
日記タイトルの頭についてるアルファベットは日記の番号です
26進数を右から読みます
例:H→7番目、XP→15(P)×26+23(X)=413番目。
A=0とする仕様につき一番右の桁はAにできませんのでご了承くださいズコー
バーコード
ブログ内検索
アクセス解析