短い距離の計算精度の評価と、対蹠点付近の計算精度の評価が不十分であった。そこで、比較する計算式を追加した上で、GeographicLibのテストデータを用いて計算精度の再評価を行った。今回比較する計算式と計算ライブラリ、および出典を以下に示す。計算精度が高い計算ライブラリ。完全球体とみなした計算。カシミール3Dで採用されている、ヒュベニの式の簡易版。ヒュベニの式のオリジナル版。Vincentyによる式。Lambertによる式。Andoyerが補正を加えたもの。Thomasが補正を加えたもの。ついては再実装を行い、前回ゾーン2の計算で間違えていたのを修正した。GeoDistance(ExtendedNewtonRaphson)は計算が収束しないことがあるため、TimeConstrainedを使って0.1秒以内に計算が終了しない場合は強制終了して0.0とした。GeographicLibは一括計算するプログラムをJavaで書き、それをMathematicaからJ/Link経由で呼び出した。True]を指定したもので計算した。対蹠点付近となる場合に0での除算が発生し、回避方法がなかったため今回の比較から除外した。使用するテストデータ精度検証に使用するデータはGeographicLibによって提供されているテストデータを使用した。極付近、両方が極付近、子午線沿い、卯酉線沿いなどの計算テストデータが含まれている。テストデータにはGeodTest.dat($n=500000$)と、GeodTest-short.dat($n=10000$)があるが、500,000点をグラフに描画すると点が重なりすぎてプロットが見えなくなってしまうGeoDistance(特にExtendedNewtonRaphson)の計算が非常に遅いの2点の理由から、GeodTest-short.datを使ったデータを使用した。各々の計算式で、テストデータの正確な値との絶対誤差(m)と相対誤差を比較した。-Mathematicaは呼び出しのオーバーヘッドが大きく、各計算式の計算量の比較にはJavaScriptの計算時間を使うのが良いと考えられる。各計算式・ライブラリへの評価GeographicLibさすがGeographicLib。誤差15nmという謳い文句は本当で、どんな距離でも安定して誤差15nm以内の精度で計算される。Haversine安定して0.6%以内に収まる。計算式も単純で実装しやすい。(国土地理院計算式)対蹠点を含め、安定して9桁〜10桁の精度。前の記事では「サイトでは異なる計算式が使われている可能性がある」としたが、サイトでもきちんと説明通りの計算が行われていると訂正する。Hubeny(Simple)短距離なら精度が高く、100mまでなら7桁程度、10kmまでなら5桁程度の精度を出せる一方、100km以上になると精度が悪化して1桁程度になってしまう。ルートデータやGPSログなど短い線分の集合に対しては、計算速度と精度のバランスが良く、カシミール3Dが採用したのも納得。Hubeny(Full)簡易版ヒュベニの式と同様、短距離に強く、長距離になると精度が悪化する傾向は変わらないが、10km程度まで12桁の精度が出て、長距離になっても精度悪化が遅い。MathematicaでCompileした場合、簡易式と計算速度がほとんど変わらなかったが、JavaScriptでは簡易式と比べて計算時間は2倍弱であった。これも速度と精度のバランスは良いと言える。Vincenty対蹠点以外では11桁程度の精度が出る。対蹠点付近では2桁まで精度が落ちるので使えない。反復計算があるため計算速度は遅く、同じ反復計算を含むGSI計算式と比較すると、対蹠点以外での精度は1桁良い一方で速度は1/10〜1/3程度。Lambert1m程度から10000km程度まで安定して5桁の精度だが、10000km以上では精度が落ち、特に対蹠点付近では2桁程度になってしまう。Andoyer-LambertLambertとほぼ同じだが、10m以下の精度が1桁程度悪くなっている。Andoyer-Lambert-ThomasLambertに比べて、10000km以下では2桁程度精度が向上していて7桁程度あるが、やはり対蹠点付近ではLambertと同じく2桁弱になってしまう。速度も他のLambert系と比較して良く、ヒュベニの式のオリジナル版と同等の計算速度。ヒュベニの式より広い範囲(10000km以下)で精度と速度のバランスが良い。GeoDistance(Vincenty75)対蹠点以外では常に11桁の精度が出ている。対蹠点付近では2桁程度まで落ちるが、他のMethodより良い。GeoDistance(Robbin61)10000km以内では2桁精度、10000km以上では使い物にならない。GeoDistance(ExtendNewtonRaphson)対蹠点以外では常に5桁程度の精度。対蹠点付近ではそもそも計算が収束せず結果が返ってこないので使えない。精度を求めるならGeographicLibを使うのが一番良い(各言語に移植されている)ルートやGPSログなど、短距離の計算に限られる場合は、ヒュベニの式が精度と速度のバランスが良い(簡易版は100m以下、オリジナル版は10km以下)10km以上になる場合はAndoyer-Lambert-Thomasが速度と精度のバランスが良くなる速度よりも精度を優先し、かつ外部ライブラリを使わない(使えない)場合は、国土地理院の計算式が良い(ただ文書を見ても非常に実装しにくいのが難点)MathematicaならMethodオプションはデフォルトのままが一番で、対蹠点以外では問題ない。対蹠点付近を含む計算をするならGeographicLibをJ/Linkで呼び出して使う(mathematica-geodesic)。