【10進数】
10進数は数を10進数のまま表現したもので、10進数の各桁を2進数数桁で表現する
ことからBCD(Binary coded decimal,2進化10進数)と呼ばれる。
これには1桁に4bit割り当てるパック形式(packed form)と8bitつまり1バイト割り当てる
アンパック形式(unpacked form)がある。又符号付きと符号無しの形式がある。
| アンパック符号無し | z | z | z | z | z | z | z | z |
| | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 |
| アンパック符号付き | z | z | z | z | z | z | z | s |
| | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 |
| パック符号付き | D7 | D5 | D3 | D1 |
| | D6 | D4 | D2 | S |
| パック符号無し | D7 | D5 | D3 | D1 |
| | D6 | D4 | D2 | Z |
ここでZと書いたものは一般にゾーン(zone)と呼ばれるが要するにダミーである。
アンパック形式の書き方は数を文字と同等に扱おうという考え方になっており、
通常の文字のコードの一部になるように、このゾーンを定めている。
この値はIBMが定めたEBCDIC規格では1111(F)であるが、アメリカ標準のASCII規格では
0011(3)である。また符号付きアンパックの場合最後の桁の上4bitに符号が格納され、
その値はEBCDICではプラスの場合1100(C)、マイナスの場合1101(D)である。
ASCIIではプラスの場合0011(3)、マイナスの場合0111(7)である。
EBCDIC規格はIBMの大型コンピュータやオフコンなどで使用され、ASCII規格は
パソコンやミニコンで使用された。しかし現在ほとんどのコンピュータがパソコン・
ミニコン系になってしまった結果、ASCII規格が主流になりつつあるが、依然として
大きなシステムのファイルはEBCDICで書き込まれているものが多いと推定される。
【日付と時刻】
世界時(UT)と日本標準時(JST)
経度0°(基準子午線上)のグリニッチ天文台(イギリス)における平均太陽時を、各国共通の世界時(Universal Time:以下UTと略)と言う。ところで、日本標準時(Japanese Standard Time:以下JSTと略)は、東経135°(兵庫県明石市)の子午線を平均太陽が通過する時を12時と定めているので、地球が1時間に15°東へ自転することを考えれば、JSTはUTよりも9時間早い時刻となる。このUTとJSTの関係を日の単位で表わすと次のようになる。
UT = JST - 9時間 = JST - 0.37500日
つまり、JSTはUTより日の単位では0.375日すすんでいることになる。
ユリウス日(JD)と準ユリウス日(MJD)
日常私たちが使っている日数の数え方は、グレゴリオ暦と言われるものである。地球が太陽の周りを1回転するのに要する日数(これを1回帰年と言う)は365.2422であるから、平年を365日をして毎年0.2422ずつ余った日数を累積し、平年より1日多い閏年をもうける数え方である。閏年の規定は「4で割り切れる年は閏年であるが、100で割り切れる年は平年とする。ただし、400で割り切れる年は閏年とする」である。
一方天文計算では天体暦の計算や天体暦の計算や観測の整理などの日数計算に、1日ごとに通し番号をつけたユリウス日(Julian Day:以下JD)を用いる。ユリウス日は紀元前4713年1月1日12時UTを第0日としたものである。
たとえは、2000年1月1日0時UTは、JDでは2451544.5日である。JDに端数0.5がついているのは、JDの始まりが世界時の正午(12時UT)だからである。ところで、現在ではJDの始めからすでに6700年近くすぎているため、JDの値は2440000を越えている。このため、最近では、JDの頭2桁をとり、0.5を引いて1日の始まりを0時UTにした準ユリウス日(Modified Julian Day:以下MJD)がよく使用される。MJDとJDの関係は次のようになる。
MJD = JD - 2400000.5
つまり準ユリウス日は1858年11月17日0時UTを始まりとする日数の数え方である。先ほどの例の2000年1月1日0時UTは、MJDでは51544.0日となる。
準ユリウス日(MJD)への変更
ある年月日(西暦)と時刻をMJD変更する方法を以下に示す。まず、閏年のことを考慮する必要があるので年をy、月をm、日をdとすると、年月日からMJDへの変更は、フリーゲルの公式を利用して次式でできる。
MJD = int[365.25y] + int[y/400] = int[y/100]
+ int[30.59(m-2)]+d-678912
1月と2月の場合、m = m + 12, y = y - 1とする。intは[ ]の中の整数部を求める意味である。
|
|