JPL 天体暦 DE シリーズのバイナリデータの形式に関する覚書

NASA ジェット推進研究所 (JPL) が公開している数値天体暦 __DE__ (Development Ephemeris) シリーズは、太陽系内の主要な天体の位置などの情報を数値的に表した暦である。NASA を始めとする宇宙機関の太陽系探査機のための軌道計算、探査計画のほか、一般用途での天体位置の計算にも広く用いられている。暦の主要部は、決められた時間範囲での天体の位置と速度とを計算するための（チェビシェフ多項式の）係数の羅列からなっており、データはバイナリ形式またはテキスト形式のファイルとして与えられている。ただし、データ形式に関する公式のドキュメントがあまり充実していない。この覚書では、DE のバイナリデータのデータ形式について、一部推測を含めて解説し、主として天体位置の計算を行う独自のプログラム作成者に向けて、参考資料となるもの提供する。

## DE の種類と入手先について

DE は、JPL のサイトから入手できる\[1\]。

> __\[1\]__ &ensp; [Public FTP File Browser](https://ssd.jpl.nasa.gov/ftp/eph/planets/), Solar System Dynamics (SSD), Jet Propulsion Laboratory, California Institute of Technology.（2023 年現在、多くのブラウザはすでに FTP プロトコルに対応しなくなっており、リンク先の JPL のサイトは FTP の内容を HTTP 経由で提供しているものである。FTP サーバーが依然運用中かどうかは未確認）

DE の後に数字が付けられた番号があり、この番号によって作成・公開時期のほか、扱う天体の種類や扱う時間の範囲、精度などが異なっている。以下これを DE の __バージョン__ と呼ぶこととする。2023 年現在で最も新しく包括的な DE のバージョンは、2020 年 6 月作成の __DE440__ と __DE441__ である。この DE440/441 に関して、論文 Park et al. (2021) \[2\] でそのデータの作成や内容が詳説されている。ただし、データの詳細な形式等にはそこでは触れられていない。

> __\[2\]__ &ensp; Ryan S. Park, William M. Folkner, James G. Williams, and Dale H. Boggs (2021) [“The JPL Planetary and Lunar Ephemerides DE440 and DE441,”](http://dx.doi.org/10.3847/1538-3881/abd414) _The Astronomical Journal_ __161__(3) 105-, DOI 10.3847/1538-3881/abd414.

数値天体暦は、惑星や月、太陽、地球などの天体やその天球中での姿勢について、ある時間区分を区切って、高精度で簡易に求められるようにした、いわば数表である。DE440 は 1549 年 12 月 21 日から 2650 年 1 月 25 日までの時間区間をカバーしており、これは通常目的の天体位置計算のために十分な範囲であろう。本体のバイナリファイルの大きさはおよそ 100 MB ほどである。同時に公開された DE441 ははるかに広い範囲 -13200 年から 17191 年までをカバーし、バイナリファイルでもサイズは 2.6 GB ほどとなっている。DE441 は長期の計算のために軌道に影響を及ぼす一部の効果を無視しており、21 世紀中など近時の期間に限れば DE440 の方が高い精度の値を与えている。バイナリファイルのほかにテキスト形式（ASCII 形式）のファイルがあるがサイズは大きくなる。以下この覚書では DE440 のバイナリファイルを主たる対象としその構造を探る。テキスト形式のものについては以降扱わない。

JPL サイトには、バイナリデータとして数値のバイト順の違いに応じ、ビッグエンディアン形式とリトルエンディアン形式の 2 種類があるとの記述があるが\[3\]、DE430 以降のデータに関し JPL サイト\[1\]ではリトルエンディアン形式のものしか置かれていないようである（2023 年 7 月現在）。

> __\[3\]__ &ensp; [JPL Planetary and Lunar Ephemerides](https://ssd.jpl.nasa.gov/planets/eph_export.html), Jet Propulsion Laboratory, California Institute of Technology, 2020-12-21.

リトルエンディアン形式の DE440 のディレクトリは以下となる。

- 🔗 [/ftp/eph/planets/Linux/de440/](https://ssd.jpl.nasa.gov/ftp/eph/planets/Linux/de440/)

上ディレクトリは以下の 3 つのファイルからなる。

- `header.440` (22.3 KB)
- `linux_p1550p2650.440` (97.5 MB)
- `testpo.440` (838.1 KB)

このうち、`linux_p1550p2650.440` がデータ本体である。`header.440` はデータの内容や天文定数を含んだヘッダ部分のテキスト形式のファイルである。`testpo.440` は検証用に計算された天体の時刻と選択された座標値を記したテキストファイルである。

> __注__ &emsp; JPL の __SPICE__ (Spacecraft, Planet, Instrument, C-matrix, and Events) Software Toolkit は、カーネルと呼ばれるデータをもとに太陽系探査のために位置、速度、姿勢などを包括的に扱うソフトウェア群である[4]。DE も SPICE を通じての利用が推奨されている。SPICE は元々、Fortran で記述された大規模なプログラム群と思われ、f2c によって C に変換されたものも提供されている。また、Matlab に対応したものもあるとされている。ただし、その構成から多様なプラットフォーム上での利用には適さないところがある。この覚書では、SPICE を利用せずに天体位置の計算を主目的に DE データを直接解析するソフトウェア構築を行うための情報を扱い、SPICE に関しては以降、取り扱わない。

> __注__ &emsp; DE440 はバイナリファイルがひとつのファイルとなっているが、過去のバージョンではいくつかに分割されているものも認められる。

## レコード

DE 本体のバイナリファイルは、8 KB 前後の同じ大きさの単位から全体が構成されている。この大きさはバージョンにより違いはあるが、 標準的な IEEE 754 倍精度浮動小数点数の大きさ（すなわち 8 バイト、以下 double 値と呼ぶ）の倍数となっており、DE440 では 8144 B（= 0x1FD0 B = 1018 × 8 B）となっている。資料等では 4 B 単位で表したこの値を __KSIZE__ と呼んでいる（すなわち、DE440 では KSIZE = 2036）。

> __注__ &emsp; KSIZE はデータの内容から推測可能ではあるもののバイナリデータ内には明示されておらず、事前に把握しておくことが望ましい。ただし、ヘッダを収めたテキストファイルには冒頭で明記されている。

本体データは特殊な形式を持つ冒頭部も含め、KSIZE 相当の大きさを単位としたデータの集まりとして構成されており、ここではこれを __レコード__ と呼ぶものとする。冒頭 2 つのレコードは、それ以降と構造が異なるいわばメタデータであり、以下、最初のレコードを __ヘッダレコード__ 、その次を __定数レコード__ と呼ぶことにする。また、これらに対して 3 番目以降の実際のデータレコードを __本体レコード__ と呼ぶことにする。

## ヘッダレコード（第 1 レコード）の構成

ファイルの最初のレコードであるヘッダレコードにはデータの他の部分を読むために必要なデータが含まれる。一部に推定を含むが、その構成は頭から順に以下のようなフィールドからなる（フィールド名は必ずしも正式なものではない）。

- __TTL__ &emsp;固定長 ASCII 文字列から構成されたタイトル (title)。84 文字の ASCII 文字列 3 行からなっており、改行文字やヌル文字のような特殊文字は含まれず、余白は空白文字 (`␣`, 0x20) で埋められている。DE440 での内容は以下のようであり、1 行目の暦の実際のタイトルに加えて、2・3 行目で ASCII 文字列としてデータが扱う開始時刻と終了時刻がそれぞれ収められている。ただし、データの解析・利用に際してここから直接データを得る必要はない。

<div style="margin-left:2em">

```text
JPL Planetary Ephemeris DE440/LE440                                                 
Start Epoch: JED=  2287184.5  1549-DEC-21 00:00:00                                  
Final Epoch: JED=  2688976.5  2650-JAN-25 00:00:00                                  
```

</div>

- __CNAM__ &emsp;定数名。 名称は constant names を意味するものだろう。それぞれ英大文字で始まり、英大文字と数字の 6 文字からなる ASCII 文字列 400 件が列挙されており、余白に終端文字のようなものはなくやはり空白文字で埋められている。この定数名の形式は古い Fortran の変数名の制限にならったものと思われるが、その短さから名前から内容を推測することは難しい。この CNAM には定数の名前だけが 6 B ごとに列挙されており、値はこれとは別に 2 番目のレコードである定数レコードに double 値として収められている。天体暦は、理論計算がこれまでの観測データをうまく説明できるように各種の定数もパラメーターとして同時に定めるものであるため、一般に各種天文定数の情報源でもあり、計算に利用されたそうしたパラメーターを明示するものでもある。ただし、ここに収められた定数の内容は（ほぼ未解読であるものの）、ある時刻の天体の位置を単純に知る目的においては必要とされない。DE440 において、定数値のはじめの 2 つは `DENUM`, `LENUM` の名を持ち、バージョン番号を表す（LE は Lunar Ephemeris すなわち月の暦を意味しているが、少なくとも現在、独立した暦ではなく、惑星歴と統合されたものとして扱われていると思われる）。実際の定数値ではこれらの値に同じバージョン番号（DE440 ならば 440.0）が double 値として与えられている。

- __SS__ &emsp;__開始時刻、終了時刻、レコードの単位となる時間間隔__ の 3 つの値がそれぞれ 8 バイトの double 値でこの順で収められている。開始・終了時刻の元期と単位は JED (the Julian Ephemeris Day) である。JED はよく知られたユリウス日 (JD, the Julian Day) を元とした時刻であるが、太陽系力学時 (TDB) を基盤としており、我々が現在日常的に用いている協定世界時 (UTC) とは数十秒相当の（いくらか不規則な変動をともなう）ずれがある。これら時刻系の関係は歴史的理由もあっていささか込み入ったものになっているが、この覚書では扱わない。3 番目の値は、本体データのレコードの基本となっている時間間隔を（力学時の）日数単位で表したものである。すなわちデータは開始時刻から終了時刻までのこの単位で分割し、それぞれのデータが本体の 1 レコードに記載されている。よって、終了時刻と開始時刻の差は、この間隔の倍数となっており、この倍数はヘッダ部分を除く本体のレコード数でもある。DE440 においてこの時間間隔は 32 日である。上のタイトルの記述からもわかるように DE440 は 401 792 日分の範囲を扱っているので、ここから本体データは 12 556 個のレコードからなることがわかる。冒頭の 2 つのレコードを含めてファイル全体では 12 558 レコードということになる。

- __NCON__ &emsp;定数の数 (number of constants)。上記の CNAM フィールドで（最大）固定長 400 件の定数名が列挙されているが、おそらく歴史的理由からこの定数領域は不足したと見られ、データは後述する可変長の追加の定数名領域をもつ。このフィールドは 4 バイト整数値 (以下 int32 と表す) として、固定長・可変長両者の定数の数を与える。よって、値が 400 よりも大きな場合、その分が追加の定数の数となる。DE440 において定数数は 645 となっており、よって 245 件の追加の定数をもつ。

- __AU__ &emsp;Double 値として特に __長さの天文単位__ の値が km 単位で収められている。元々、地球の軌道長半径を基準としていた天文単位の大きさは、惑星探査機などを利用した測定技術の発達によって 2014 年に m を元とした定義定数に変更される大きな枠組みの改定を受けた。この値は現在、誤差なく 149 597 870.7 km と定められている。DE430 以降の DE においても、この値がそのまま収められている。ただし近時までガウスの天文単位系の元で、力学計算は長さの天文単位を基礎に構築されてきたものであり、その値は観測データと一致するよう追求されるべきものとされてきた値であった。よって種々の DE バージョンを扱うことを前提とし、かつ天文単位を必要とする場合、このフィールドの値を一貫して参照すべきだろう。

- __EMRAT__ &emsp;地球の月の質量を 1 とした地球の質量 (the Earth-Moon mass ratio)。暦のデータの一部は、地球-月系の重心の位置を与えている。このため、他の定数とは異なって、地球または月を基準とした他の天体の位置を求めるためにはこの比が必要となる。おそらくこの理由により、他の定数とは分けて（天文単位とともに）独立したフィールドとしてヘッダで値が与えられているものと思われる。逆数ではなく月の質量を 1 とすることに注意する。値としてはおよそ 81.3 である。

- __IPT__ &emsp;12 種のデータの種類（天体の位置およびその他）ごとの、(1) レコード中のデータ位置のオフセット値、(2) チェビシェフ補間の次数（係数の数）、および (3) レコードが扱う区間を更に細かく分けた副区間数の 3 つ組からなっており、やや込み入った構成である（IPT が何の略かは不明）。それぞれは int32 型の整数値であり、よって 12 × 3 × 4 B = 144 B の領域を占める。以下では 12 種のデータの種類を __データ対象__ （または単に対象）と呼ぶこととする。12 種の対象とは順に、 __1. 水星（の位置、以下同じ）、2. 金星、3. 地球-月系の重心、4. 火星、5. 木星、6. 土星、1. 天王星、8. 海王星、9. 冥王星、10. 地球重心から見た月、11. 太陽__、そして __12. 章動__ を表す。（10 と 12 以外は原点を太陽系重心に置く。12 番目の章動は角度のデータである。）ただし、DE のすべてのバージョンがこれらのデータ対象をすべてもつわけではなく、欠けている対象は (2) の補間次数と (3) の副区間数が 0 であることによって表される。例えば、DE440 においては 12 種のデータ対象をすべてもっているが、2014 年公開の DE432 は 12 番目の章動のデータを欠く。また、データ対象はこの 12 種だけではなく、拡張として後述の別フィールドである LPT, RPT, TPT がある。対応するデータレコードの構成の詳細については後述するが、全体が double 値からなっており、よって、全体を double 値の配列とみなすことが可能である。(1) の __データ位置のオフセット値__ は、データが開始されるレコード中でのこの配列の添字とみなすことができる。ただし、添字は Fortran の流儀に従っており 1 から始まることに注意する。(2) __チェビシェフ補間の次数__ は、補間に使われるチェビシェフ多項式のための係数の数を表し、内惑星や月の位置のような素早く値が変化する対象では大きく、外惑星や冥王星では小さくなる。(3) の __副区間数__ は、SS の 3 番目の値で表されているレコードの時間間隔をさらにいくつかの区間に等分割してチェビシェフ補間を行う区間の数を表す。これも素早い変化を持つ対象では多く、外惑星等では最小の 1 となっている。確認できる限り副区間数は 2 のべきの値（1, 2, 4, 8, ...）を持つ。

- __NUMDE__ &emsp;ここで DE のバージョンと呼んでいる暦の種類を表す数字をもつ。前述の定数値にある `DENUM`, `LENUM` とは異なり、値は 4 バイトの int32 値である。すなわち、DE440 ならば整数値 440 となる。

- __LPT__ &emsp;おそらくは拡張されたデータ対象に関する領域である。3 つの int32 値からなる IPT と同じ構成をもつが、それとは分離されて置かれている。地球の月の秤動 (libration) のデータ位置とデータ構成を示す。他の位置データと内容は異なっているが、データそのものはについては後述する。DE のバージョンによっては有しておらず、その場合、この領域の補間次数と副区間数は 0 となる。

- __CNAM2__ &emsp;上述の定数名 CNAM に加えて定義された追加の定数名の領域。CNAM と同様に最大 6 文字の ASCII 文字列からなり、余白があれば空白文字とされると思われる（DE440 ではここに余白は見られない）。他の領域と異なって大きさは可変長となっており、NCON から CNAM で定義された 400 件を引いた件数をもつ。よって、この領域の大きさを知るには NCON の値を参照する必要がある。前述の通り、DE440 では 245 件であり、1470 B (= 0x5BE B) を占める。

- __RPT__ &emsp;IPT, LPT と同じ構成の 3 つの整数値をもつ。このフィールド自体は DE430 以降に追加されたと思われるが、サイト \[1\] にあげてあるバージョンの中でこれに対応するデータをもつものは見当たらない。詳細は確認できていないが、Park et al. (2021) [2] 論文にある月の外殻の固体部分（マントル）のマントルに準じた座標系で見た角速度に関するデータ $(\omega_{mx}, \omega_{my}, \omega_{mz})$ を表していると思われる。これ以降のフィールドと同様に CNAM2 が可変長であるため、それに次いだ位置から始まるこのフィールドのヘッダ中でのオフセット値は一定しない。DE440 では 4326 B (= 0x10E6 B) に対応する。

- __TPT__ &emsp;やはり整数値 3 つ組のデータ形式に関するデータであり、対応するデータ対象は地球重心における地球力学時（TT または TDT）と太陽系力学時（TDB、かつての ET に相当）との差を表す。フィールドは RPT と同じく DE430 以降に追加されたと思われ、RPT に次ぐ位置から始まる。DE440 はこのデータを有せず、オフセット値のみが指定されて補間次数と副区間数が 0 となっている。データのある JPL のサイトにおいて `de440t` と名付けられたディレクトリのように DE のバージョン番号についで “t” の文字が付けられた暦がこのデータを含んでいるようだ。

- __パディング領域__ &emsp;ヘッダレコードの残りの領域は未使用のパディング領域である。前述の通り、レコード長も追加の定数名領域 CNAM2 もバージョンによって異なりうるので、パディング領域の大きさも異なりうる。DE440 ではレコード長が 8144 B であり、TPT までで 4350 B (= 0x10FE B) を使用しているので、半分弱の 3794 B がパディングとして使われている。DE440 バイナリデータではこの領域は 0 で埋められている。今後のバージョンで、過去にないデータが追加されるときその形式は RPT, TPT に準じた形でこの領域に追加されることが想定しうる。そのようなデータが存在するかどうかは、オフセット値が 0 であるかどうかで確認できるだろう。

ここまで列挙したヘッダレコードのフィールドのオフセット値、サイズ等をまとめると以下の表のようになる。

<div style="font-family:monospace;font-size:smaller;white-space:pre">

| フィールド名 | オフセット [B] | 総サイズ [B] | 型 | 要素数 | 内容概略 |
|:-------|-------------:|-------------:|:----------:|-----------:|:----|
| TTL    |    0   (0x0) |  252  (0xFC) | 84-B ASCII |          3 | タイトル |
| CNAM   |  252  (0xFC) | 2400 (0x960) | 6-B ASCII  |        400 | 定数名 |
| SS     | 2652 (0xA5C) |   24  (0x18) |   double   |          3 | 開始・終了時刻・間隔 |
| NCON   | 2676 (0xA74) |    4   (0x4) |   int32    |          1 | 定数数 |
| AU     | 2680 (0xA78) |    8   (0x8) |   double   |          1 | 天文単位 |
| EMRAT  | 2688 (0xA80) |    8   (0x8) |   double   |          1 | 地球/月 質量比 |
| IPT    | 2696 (0xA88) |  144  (0x90) | int32 × 3  |         12 | 位置・次数・副区間数 |
| NUMDE  | 2840 (0xB18) |    4   (0x4) |   int32    |          1 | DE バージョン |
| LPT    | 2844 (0xB1C) |   12   (0xC) | int32 × 3  |          1 | 月の秤動 |
| CNAM2  | 2856 (0xB28) |   (variable) | 6-B ASCII  | (variable) | 第 2 定数名領域 |
| RPT    |   (variable) |   12   (0xC) | int32 × 3  |          1 | 月姿勢の角速度 (?) |
| TPT    |   (variable) |   12   (0xC) | int32 × 3  |          1 | TT - TDB |

</div>

> __注__ &emsp; この節で述べたヘッダレコード（および、次に述べる定数レコード）の内容は、JPL サイトでバイナリファイルとは別に与えられているヘッダのテキストファイル（DE440 においては `header.440`）においても確認できる。ただし、このテキストファイルも独自の形式を持つ。ヘッダテキストファイルの形式については、この覚書では扱っていないが、それを解説した分析サイトがあり、参考にしたいくつかは覚書末尾の謝辞の欄に上げているので、そちらを参照されたい。

DE の一部のバージョンにおいて、ヘッダファイルで確認できる KSIZE、それが完全にカバーしている開始・終了年、保持するデータ対象の一覧を以下にあげる。

<div style="font-family:monospace;font-size:smaller;white-space:pre">

| バージョン | 作成年 | KSIZE | 開始年 | 終了年 | 保持するデータ対象 |
|:---|---:|---:|---:|---:|:---|
| | CE | 4 B | CE | CE | |
| DE200  | 1981 | 1652 |   1600 |  2168 | IPT に対応する全データ |
| DE202  | 1987 | 1652 |   1900 |  2049 | IPT に対応する全データ |
| DE403  | 1993 | 2036 |   1600 |  2198 | IPT に対応する全データと LPT（秤動）|
| DE405  | 1997 | 2036 |   1600 |  2200 | IPT に対応する全データと LPT（秤動）|
| DE406  | 1997 | 1456 |  -2999 |  2999 | IPT に対応するデータのうち章動以外 |
| DE410  | 2003 | 2036 |   1901 |  2018 | IPT に対応する全データと LPT（秤動）|
| DE413  | 2004 | 2036 |   1900 |  2049 | IPT に対応する全データと LPT（秤動）|
| DE414  | 2005 | 2036 |   1600 |  2200 | IPT に対応する全データと LPT（秤動）|
| DE418  | 2007 | 2036 |   1900 |  2050 | IPT に対応する全データと LPT（秤動）|
| DE421  | 2008 | 2036 |   1900 |  2052 | IPT に対応する全データと LPT（秤動）|
| DE422  | 2009 | 2036 |  -2999 |  2999 | IPT に対応する全データと LPT（秤動）|
| DE423  | 2010 | 2036 |   1800 |  2199 | IPT に対応する全データと LPT（秤動）|
| DE430  | 2013 | 2036 |   1550 |  2649 | IPT に対応する全データと LPT（秤動）|
| DE430T |      | 1964 |   1550 |  2649 | IPT に対応するデータのうち章動以外と TPT (TT - TDB) |
| DE431  | 2013 | 2036 | -13199 | 17190 | IPT に対応する全データと LPT（秤動）|
| DE440  | 2020 | 2036 |   1550 |  2649 | IPT に対応する全データと LPT（秤動）|
| DE440T |      | 2244 |   1550 |  2649 | IPT に対応する全データと LPT（秤動）、TPT (TT - TDB) |
| DE441  | 2020 | 2036 | -13199 | 17190 | IPT に対応する全データと LPT（秤動）|

</div>

ほとんどの場合は DE440 のような新しい包括的なバージョンでこと足りると思われるが、過去のバージョンが必要な場合は、それぞれがどのような性質のものであるかなど、上掲の文献 \[3\] を参照されたい。

## 定数レコード（第 2 レコード）の構成

2 番目のレコードである定数レコードは、ヘッダレコードの CNAM, CNAM2 で名前が列挙された定数名に対応する値を区切りなく順に列挙したものである。値はすべて double 値であるため、配列として読み込める単純な構造をもつ。

DE440 では、レコードが 8144 B (KSIZE = 2036) であり、よって 1018 件の double 値が保持できるのに対して、NCON が 645 であるので頭から 6 割あまりが利用されていることになる。前述のように最初の 2 つの定数は `DENUM`, `LENUM` としてバージョン番号を保持しているので、double 値としてともに 440.0 を持つ。

## 本体レコード（第 3 レコード以降）の構成

3 番目のレコードからファイル末尾までがデータ本体のレコードとなる。本体レコードもすべて double 値で構成された見かけ上、比較的単純な構造をもつ。しかし、以下に見るようにそのデータの並び順はいささか入り組んでいる。

本体のレコードは、ヘッダの SS の 3 項目目で指定された時間間隔分の時刻を順にそれぞれ担当しており、開始時刻から終了時刻まで時刻順にこれらが並んでいる。よって SS フィールドの情報（暦全体の開始時刻 $T_S$、終了時刻 $T_E$、間隔 $D$ とする）とレコード位置 $x$ からレコードが担当する時間間隔は計算することができる。すなわち、単一レコードの開始時刻 $t_S(x)$ が &ensp; $t_S(x) = T_S + (x - 3) \times D$  &ensp; であり、終了時刻 $t_E(x)$ が &ensp; $t_E(x) = t_S(x) + D$ &ensp; である。逆に求めたい時刻が含まれるレコードの位置もここから直ちに計算できる。

レコードに並んだ double 値のうち最初の 2 つは、これら __レコードが担当する時間間隔の開始時刻__ $t_S$ と __終了時刻__ $t_E$ を JED（力学時基準のユリウス日）として持っている。確認の限り、暦全体の開始時刻 $T_S$、終了時刻 $T_E$ は JED での半整数値（端数 0.5 をもつ値）であり、時間間隔 $D$ は自然数である。よって、浮動小数点値として表されたこれら各レコードごとの開始時刻 $t_S(x)$、終了時刻 $t_E(x)$ も丸め誤差を生じない。なお、副区間数が比較的小さな 2 のべき乗であると思われるので、この性質は副区間の開始・終了時刻でもなりたつ。

> __注 &ensp; JED の double 値を用いた時刻表現について__ &emsp; ユリウス日は 21 世紀を含め西暦 1029 年から 6771 年までの範囲を整数部が 22 ビット (2 097 152 ≤ JED < 4 194 304) の値として表し、仮数部 53 ビットの double 型で表された値では小数部として残り 31 ビットを持つことになる。これは、時刻が 2⁻³¹ 日、すなわちおよそ 0.04 ms 単位で表現できることを意味し、通常の天文計算での時刻表現において十分な精度を保つと考えうる。

レコード中の残りの double 値はすべて、特定の順序で並んだチェビシェフ補間のための係数である。これはヘッダの IPT, LPT, RPT, TPT で指定された各天体その他のデータ対象と、時間区間を当分割した補間の副区間、その対象が表すデータの次元、そしてチェビシェフ補間の次数ごとの係数の 4 重の入れ子構造となっている（後者ほど優先、すなわち入れ子の内側でありデータ上で隣接する）。

このうち、最も外側のデータ対象ごとのデータの位置に関しては、ヘッダのデータ対象の形式を指定した IPT などの項目の最初のオフセット値から知ることができる（前述のようにこのオフセットはレコード全体を double 配列とみなしたとき 1 から始まる添字となる）。2 つめの時間間隔の副区間の数も、同じ項目の 3 番目の要素からわかり、最後のチェビシェフ補間の次数も 2 番目の要素で知れる。その間の、データの次元数のみヘッダ中には明示的に与えられていないため、別途知る必要がある。以下、各データ対象に対しデータの次元数とともにそのデータの内容をまとめる。

- __IPT で指定された各惑星（水星〜海王星）、冥王星、太陽の位置__ &emsp;IPT の 12 種のデータ対象のうち、10 番目の地球重心から見た月の位置と 12 番目の地球の章動を除く対象はすべて同じデータ内容をもち、__国際天文準拠系__ (the International Celestial Reference Frame, ICRF) と呼ばれる座標フレーム (reference frame) でみた天体の直交座標（デカルト座標）位置である（ICRF にはいくつかの改定版があるが、DE440 では ICRF3）。よって次元数は 3 であり、順に座標フレームの $(x, y, z)$ 座標値を表し、単位は km である。ICRF は、従前使われてきた J2000.0 元期の赤道座標系にごく近く、 0″.1 以下で一致している。このため、通常の精度の位置計算ではその差は無視しうる。

- __地球重心から見た月の位置（IPT 第 10 項目）__ &emsp;IPT の 10 番目に対応するデータ対象のみ、天体の位置を表すものとしては原点が異なり、地球の重心から見た月の位置を表している。原点が異なる以外、座標軸は ICRF に準拠すると思われ、よって $(x, y, z)$ 座標の 3 次元の値である。単位も km で表されている。3 番目の項目では地球と月の重心の位置が対象となっており、この 2 つを組み合わせてICRF における地球と月の位置を知るためには、ヘッダで定義されている地球/月の質量比の値が必要となる。

- __地球の章動（IPT 第 12 項目）__ &emsp;IPT に列挙された 12 種のデータ対象の中では、この対象のみ 2 次元のデータである。伝統的に地球の章動を表すために用いられている __黄経における章動__ $\Delta\psi$ と __黄道傾斜における章動__ $\Delta\epsilon$ とを rad 単位で持っている。歳差の影響が考慮された __平位__ (mean place) $r_M$ に対して、章動も考慮した __真位__ (true place) $r_T$ は、&ensp; $r_T = R^T_x(-\varepsilon-\Delta\varepsilon) \cdot R^T_z(-\Delta\psi) \cdot R^T_x(\varepsilon)\ r_M$ &ensp; で求められる。ただし、$\varepsilon$ は __平均黄道傾角__ であり、$R^T_{(\cdot)}(\cdot)$ は右手系における各座標軸のまわりの __座標系回転行列__ を表す。章動の位置への影響は 10″ 程度である。

- __月の秤動 (LPT)__ &emsp;月の外殻（地殻とマントル）の向きに固定して定められている主軸系 (the principal axes, PA) と ICRF の関係を座標系間の回転として表す。資料では月のマントルとの表現が見られるが、これは我々が目にする月の地殻と一体のものを指している。姿勢を表すために伝統的に用いられている z-x-z 系オイラー角 (the Euler angles) の 3 つの角度の組 $(\varphi_m, \theta_m, \psi_m)$ が用いられる。よって、次元は 3 次元であり、単位は rad である。より具体的には、PA における座標値を $r_{\mathrm{PA}}$ とするとき、ICRF での位置 $r_{\mathrm{ICRF}}$ は、&ensp; $r_{\mathrm{ICRF}} = R^T_z(-\varphi_m) \cdot R^T_x(-\theta_m) \cdot R^T_z(-\psi_m)\ r_{\mathrm{PA}}$ &ensp; である。$R^T_{(\cdot)}(\cdot)$ は同じく __座標系回転行列__ を表す。

- __月の角速度 (RPT)__ &emsp;この項目は十分確認が取れておらず、内容については推測である。論文 Park et al. (2021) [2] にある月の外殻の角速度 $(\omega_{mx}, \omega_{my}, \omega_{mz})$ を表すものと考えられる。次元数は 3、単位は 1 日あたりのラジアン (rad/day) と思われる。この角速度は前項の秤動角の時間微分と関係づけられる。

- __地球力学時 (TT) と太陽系力学時 (TDB) の差 (TPT)__ &emsp;地球重心における地球力学時 (TT) と太陽系力学時 (TDB) の差を秒単位で表し、次元は 1 である。2 つの時刻系は一般相対論的効果によって異なる進み方をするが、その差は年を単位としておよそ周期的であり振幅 1.7 ms 程度の小さな量である。このため、一般の位置計算においてはほぼ無視しうる。

> __注__ &ensp; 上にあげた式の中でいう __座標系回転行列__ は、対象を固定し座標の方を回転させることに相当する以下の行列である。こうした座標系の方を回転させる変換は、__受動的__ (passive) または __alias__ な変換ともよばれる。座標系回転行列は対象の方を回転させる __能動的__ (active) または __alibi__ 変換による（目にすることの多い）回転行列の逆行列であるので、ここではあえて行列に転置の符号 $(\cdot)^T$ を付した。
> $$\small R^T_x(\theta) = \left(\begin{array}{ccc} 1 & 0 & 0 \\\\ 0 & \cos\theta & +\sin\theta \\\\  0 & -\sin\theta & \cos\theta \end{array}\right), \\\\ \small R^T_y(\theta) = \left(\begin{array}{ccc} \cos\theta & 0 & -\sin\theta \\\\ 0 & 1 & 0 \\\\ +\sin\theta & 0 & \cos\theta \end{array}\right), \\\\ \small  R^T_z(\theta) = \left(\begin{array}{ccc} \cos\theta & +\sin\theta & 0 \\\\ -\sin\theta & \cos\theta & 0 \\\\ 0 & 0 & 1 \end{array}\right).$$

これらをすべてまとめると以下の表のようになる。

<div style="font-family:monospace;font-size:smaller;white-space:pre">

| データ対象 | 形式データ | データ内容 | 次元数 | 単位 |
|:----|:--------|:----------------------|---:|:---:|
| 水星 | IPT[0] | ICRF 直交座標値 | 3 | km |
| 金星 | IPT[1] | ICRF 直交座標値 | 3 | km |
| 地球-月系の重心 | IPT[2] | ICRF 直交座標値 | 3 | km |
| 火星 | IPT[3] | ICRF 直交座標値 | 3 | km |
| 木星 | IPT[4] | ICRF 直交座標値 | 3 | km |
| 土星 | IPT[5] | ICRF 直交座標値 | 3 | km |
| 天王星 | IPT[6] | ICRF 直交座標値 | 3 | km |
| 海王星 | IPT[7] | ICRF 直交座標値 | 3 | km |
| 冥王星 | IPT[8] | ICRF 直交座標値 | 3 | km |
| 月 | IPT[9] | 地心赤道直交座標値 | 3 | km |
| 太陽 | IPT[10] | ICRF 直交座標値 | 3 | km |
| 章動 | IPT[11] | (Δψ、Δε) | 2 | rad |
| 月の秤動 | LPT | オイラー角 (ϕ, θ, ψ) | 3 | rad |
| 月姿勢の角速度 (?) | RPT | (ω<sub>mx</sub>, ω<sub>my</sub>, ω<sub>mz</sub>) | 3 | rad/day |
| TT - TDB | TPT | 時間差 | 1 | s |

</div>

## 謝辞

DE のような高精度な天体暦を、科学的精神のもとで人類の共有財産として広く公開している JPL の関係者、およびこの暦の作成に関わった多くの研究者や技術者に対し、敬意と感謝を表します。

十分な文献のない DE ヘッダの構造に関しては、ポーランドの天文学者 Piotr A. Dybczyński（ピオトル・ディプチンスキ）氏の C プログラム `jplbin.h` と `testeph.c`：

- 🔗 [JPL planetary ephemerides access software in C](https://apollo.astro.amu.edu.pl/PAD/pmwiki.php?n=Dybol.JPLEph)

および、Greg Miller（グレッグ・ミラー）氏のウェブページ：

- 🔗 [Format of the JPL Ephemeris Files](https://www.celestialprogramming.com/jpl-ephemeris-format/jpl-ephemeris-format.html)

に多くを負うています。日本語のサイトとしては、mk-mode.com 氏の記事：

- 🔗 [月・惑星の暦 JPL DE430 について！](https://www.mk-mode.com/blog/2016/04/14/about-jpl-de430/)
- 🔗 [JPL 天文暦バイナリデータの仕様！](https://www.mk-mode.com/blog/2016/04/22/about-jpl-binary-data/)

も参考にさせて頂きました。これらの方々にもあわせて感謝申し上げます。■