【发布时间】:2020-11-26 13:55:26
【问题描述】:
我正在使用this answer 的实现来为我的 GPS 跟踪软件计算两点之间的距离。
但是,我在许多 StackOverFlow 上读到使用 double 是不好的 because of the inaccurate float representation of values。因此,我在问:
- 使用
BigDecimal计算距离会更准确吗? - 将结果从 BigDecimal 转换回
double会产生额外的不准确性吗? (存储或检索值)
【问题讨论】:
-
您的结果必须有多精确?纳米精度的地理定位还是米精度就足够了?
-
距离的计算无论如何都是不准确的,因为您是在近似地球形状的基础上计算距离。你确定双打的不准确性是相关的吗?
-
double基本上适用于您测量的大多数事物(简而言之,因为测量结果可能已经比 double 所能承受的精度低),但是对于您可以精确计数的任何东西都不理想(简而言之,因为double引入的小错误在您以精确单位计数时是无法容忍的)。换句话说:从已经不精确的 GPS 结果中计算距离,double绰绰有余。 -
地球的周长约为 40,000 公里,因此您可能不需要存储大于 4000 万的数字。该数字的最小精度单位是
Math.ulp(40_000_000.0) == 7.45e-9- 所以,7nm。 -
噗,英里,公里,难怪哥伦布以为他到了中国!
标签: java math floating-point gps latitude-longitude