問題は「条件の整った」という言葉で示されます。これは数学ではなく、コンピューターの算術の問題です。
考慮すべき基本的な事実は次のとおりです。
地球上の1ラジアンはほぼ10 ^ 7メートルに及びます。
0に近い引数xの余弦関数は、1- x ^ 2/2にほぼ等しくなります。
倍精度浮動小数点の精度は約15桁です。
ポイント(2)および(3)は、xが約1メートルまたは10 ^ -7ラジアン(ポイント1)の場合、ほとんどすべての精度が失われることを意味します。1-(10 ^ -7)^ 2 = 1-10 ^- 14は15桁の有効数字のうち最初の14桁がすべてキャンセルされ、結果を表すために1桁だけが残る計算です。これを反転させる(これは逆コサイン「acos」が行うことです)ということは、メートル長距離に対応する角度のacoを計算することは意味のある正確さではできないことを意味します。 (特定の悪いケースでは、精度が失われるとacosが定義されていない値が得られるため、コードが壊れて無回答、無意味な回答、またはマシンがクラッシュします。)同様の考慮事項は、逆余弦の使用を避けることを示唆しています精度の低下に応じて、数百メートル未満の距離が関係する場合。
単純な余弦の法則でacosが果たす役割は、角度を距離に変換することです。その役割は、haversineフォーミュラでatan2が果たします。小さな角度xの接線は、x自体にほぼ等しくなります。したがって、ほぼその数値である数値の逆正接は、本質的に精度を損なうことなく計算されます。ハーベシン式は、余弦式の法則と数学的に同等ですが、短い距離(1メートル以下)ではるかに優れているのはこのためです。
地球上で100個のランダムなポイントペアを使用した2つの式の比較です(Mathematicaの倍精度計算を使用)。
約0.5メートル未満の距離では、2つの式が異なることがわかります。0.5メートルを超えると、彼らは同意する傾向があります。次のプロットは、それらがどの程度一致しているかを示すために、緯度と経度が最大5メートルまでランダムに異なる、別の100のランダムポイントペアの余弦法則の結果を示しています。
これは、距離が5〜10メートルを超えると、余弦の法則が小数点以下3〜4桁になることを示しています。精度の小数点以下の桁数は二次的に増加します。したがって、50〜100メートル(1桁)で5〜6 dpの精度(2桁)が得られます。500-1000メートルでは7-8 dpなどが得られます。