web-dev-qa-db-ja.com

Java緯度/経度のdouble vs BigDecimal

一般的に次の形式の緯度/経度を保存する場合:44.087585(つまり、ドットと6dpの前に最大2つの数値)bigdecimalsを気にする必要がありますか?

55
DD.

Doubleを使用すると、小数点以下6〜7桁の緯度/経度をインチ単位で正確に計算するのに十分な精度があります。航空では、小数度が使用されている場合、通常、少なくとも小数点以下7桁になります。 NASAのシミュレーションでは、緯度/経度データは2倍であり、その他の姿勢と高度はすべて浮動です。言い換えると、高度の小数点以下6桁は重要ではありませんが、緯度/経度の小数点以下6桁はサブフィートの精度のためです。サブフィートまでの精度が必要な場合は、lat/lonにfloatを使用しないでください。

Google Earthをいじって、マーカーを配置して最後の10進数を操作することで、精度を確認できます。

143
TreyA

doubleは、緯度/経度に適しています。通貨の操作を開始するか、精度をさらに制御する必要がある場合、BigDecimalはより重要になります。

25
CoolBeans

精度が心配な場合は、おそらくBigDecimalこの投稿で説明する多くの理由により を使用する必要があります。とは言っても、doubleまたはfloatshouldは、満足できるという点で必要なものを保存するのに十分です必要な値の範囲。

小数点以下6桁の精度では、doubleまたはfloatがトリップすることはないと思いますが、何らかの方法で値の集計を開始すると、わずかな不正確さが加算され始める可能性があります。

6
Daniel DiPaolo

doubleには、それを格納するのに十分な精度があります。ただし、ユーザーに表示するときは、%.6fガベージディジットを出力しないようにします。

6

ダブルとして保存する場合の最悪の精度は約3 nmです。

Javaで計算する場合:

Math.ulp((double) 180) * 60 * 1852

3.1582203519064933E-9

ボーナスとして;フロートに保管することで得られる最悪の精度は1.7メートルです。

3
Gussoh

ナノGPSを使用してナノトラベルでナノロボットを制御したい場合は、BigDecimalを選択してください。それ以外の場合-float/doubleで十分です。

3
keymone