最初は、
0000000000000000 ↓0
0000000000000001 ↓1
0000000000000010 ↓2
…
…
0111111111111110 ↓32766
0111111111111111 ↓32767
1000000000000000 ←この瞬間処理
1,000,000,000,000,000 (16桁の2進数) =>>32768最大これまで表せます。
桁数と表記できる数
1 1
2 2
3 4
4 8
5 16
6 32
7 64
8 128
9 256
10 512
11 1024
12 2048
13 4096
14 8192
15 16384
16 32768
17 65536
18 131072
|
ちなみに同じ2の累乗数である1,2,4,8,16,32,64…8192,16384Hz
などのクォーツ(もしあったと仮定して)でも同じようなことが出来ますが、
これらは遅すぎて精度がとりづらいので使われません。
逆にそれより大きい65536 , 131072 , 262144…Hzなどでも構
わないのですが、カウンターの桁数が多くなり過ぎるため使われません。
|
電子回路の数値は8bit , 16bit , 32bit 等で管理されていて、
8bit(二進数8桁)では精度が悪く、32bit(32桁)では回路が
大きくなりすぎてしまう(その上意味が無い)。
結局、精度がそれなりに良くて回路規模もそれなりに抑えられる
16桁の値に落ち着いたのだと思います。
今の技術なら32bitでも良いかと思いますが、精度は向上しません。
※周波数が高いと精度は高い傾向があるが、
温度によるクォーツの周波数誤差が避けられないため。
アナログ時計の場合、中にコイルが入っていて、コイルに1秒目は正の
電圧、2秒目は負の電圧、と交互に電圧をかけることで歯車が1秒分ず
つ回転していきます。
1秒でカウンタが
1000000000000000
になるのですが、じゃあ倍の65536ヘルツにしてオーバーフローを拾ったほうが
リセットの手間もなくてシンプルですよね。
ところが、その設計では前回正の電圧をコイルにかけたのか、
負の電圧をかけたのか分からないので別途フラグが必要です。
32768であれば、2進数でカウントして
1000000000000000
0000000000000000
が1秒おきに交互に現れますから、その時の一番左のビットを見て正負の電圧
を決めれば良いわけでよりシンプルです。
|