GPS 座標をデータベースに保存する必要があります。浮動小数点数は 10 進数よりも精度が低いと聞いたことがあります。本当?もしそうなら、フロートを使用する理由は何ですか?
6723 次
4 に答える
30
地球の赤道周は約40000km、経度は360度なので、赤道付近では1度が約110kmに相当します。
したがって:
- 0桁精度:±110km
- 1桁精度:±11km
- 2桁精度:±1.1km
- 精度3桁:±110m
- 4桁精度:±11m
- 5桁精度:±1.1m
- 6桁精度:±11cm
- 7桁精度:±1.1cm
ただし、極に近づくほど、緯線の長さは短くなります。たとえば、緯度が 48 度のパリcos(48) * 110 = 74 km
付近では、1 度は に相当します。
したがって:
- 0桁精度:±74km
- 1桁精度:±7.4km
- 2桁精度:±0.74km
- 3桁精度:±74m
- 4桁精度:±7.4m
- 5桁精度:±0.74m
- 6桁精度:±7.4cm
- 7桁精度:±0.74cm
したがって、タイプのフィールドは、DECIMAL(10,7)
かなり正確に満足するのに十分です。
于 2012-09-01T09:26:46.000 に答える
15
より正確な GPS 座標が必要な場合は、はい、10 進数が適しています。次のような移行でそれらを作成できます。
create_table "models" do |t|
t.decimal "latitude", :precision => 15, :scale => 10, :default => 0.0
t.decimal "longitude", :precision => 15, :scale => 10, :default => 0.0
end
人々がフロートを使用する理由は、フロートが通常、ほとんどのユースケースで十分に正確であり、保存に使用するスペースが少ないためです。
于 2012-06-15T02:01:40.787 に答える
2
小数で 100% の精度が必要な場合は、10**n (n は目的の精度) を掛けて、整数として格納します。
Float オブジェクトは、ネイティブ アーキテクチャの倍精度浮動小数点表現を使用して、不正確な実数を表します。
見る:
http://www.ruby-doc.org/core-1.9.3/Float.html
于 2012-06-15T01:49:21.040 に答える
1
ポールの答えでわかるように、ユースケースによって異なります。
float は、およそ 6 桁の精度を提供します。
±11 cm は、住所などには十分許容範囲です。また、アドレスを表示している場合、丸め誤差を悪化させる算術演算を行うことはほとんどありません。
于 2013-08-12T08:32:29.877 に答える