Core data 将核心位置的坐标存储在核心数据中。浮动还是双倍?

Core data 将核心位置的坐标存储在核心数据中。浮动还是双倍?,core-data,ios5,core-location,Core Data,Ios5,Core Location,我看到人们使用的两种变体。。。 只是不知道对于iOS5来说,浮动还不够吗?如今,这没什么大不了的 double只是一个浮点值槽,其精度是标准浮点值的两倍。除非您强制它使用浮点,否则Objective-c编译器实际上会将所有浮点值存储为双精度 浮动和双打在很大程度上是记忆极度紧张的旧时代遗留下来的。现在,当涉及到字符串格式时,您通常只会看到它们有所不同。不同大小的int也是如此。除非强制编译器执行其他操作,否则所有大小都存储在最大的可用大小中 32位浮点数可容纳7位精度,64位双精度浮点数可容纳1

我看到人们使用的两种变体。。。
只是不知道对于iOS5来说,浮动还不够吗?

如今,这没什么大不了的

double只是一个浮点值槽,其精度是标准浮点值的两倍。除非您强制它使用浮点,否则Objective-c编译器实际上会将所有浮点值存储为双精度


浮动和双打在很大程度上是记忆极度紧张的旧时代遗留下来的。现在,当涉及到字符串格式时,您通常只会看到它们有所不同。不同大小的int也是如此。除非强制编译器执行其他操作,否则所有大小都存储在最大的可用大小中

32位浮点数可容纳7位精度,64位双精度浮点数可容纳15位精度


精度为7位的最大经度179.9999仅精确到0.0001度。度约为60海里,因此0.0001度约为10米(33英尺)。如果要存储更精确的lat/lon值,则需要使用双精度(或定点整数)。

要回答使用浮点或双精度时的精度,我已得出以下答案:

E/W和N/S存储为十进制数时的最差情况精度:

  • 浮标:1.6955566米
  • 双:3.158203519064933E-9米。(即3纳米)
通过在Java中运行以下命令,您可以自己进行计算:

public class Main {
  public static void main(String[] args) {
    System.out.println(Math.ulp((float) 180) * 60 * 1852);
    System.out.println(Math.ulp((double) 180) * 60 * 1852);
  }
}

我知道这是一个旧线程,但我在搜索问题时找到了它。对于大多数应用程序来说,Float很可能已经足够了。有问题的苹果设备的GPS可能没有比这更精确的了。但只要数据不是问题,就更容易存储双倍。最近,我认为将核心数据中的坐标存储为可转换属性中的NSValue更容易:

[NSValue valueWithMKCoordinate:coordinate]

我刚刚意识到,我还需要在另一个方向上制造最大错误的毕达哥拉斯。所以更糟一点。:)