【问题标题】:Storing coordinate from Core Location in Core Data. Float or Double?将来自核心位置的坐标存储在核心数据中。浮动还是双倍?
【发布时间】:2011-12-12 16:53:07
【问题描述】:

我看到人们使用这两种变体... 就是不知道iOS5的float不够用?

【问题讨论】:

    标签: core-data ios5 core-location


    【解决方案1】:

    如今,这并不重要。

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

    Floats 和 Doubles 在很大程度上是记忆超紧的旧时代的遗留物。这些天来,您通常只会在字符串格式方面看到它们不同。各种大小的int也是一样的。除非您强制编译器执行其他操作,否则所有大小都存储在最大可用大小中。

    【讨论】:

      【解决方案2】:

      32 位浮点数保存 7 位精度,64 位双精度数保存 15 位精度。

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

      【讨论】:

        【解决方案3】:

        为了回答您在使用浮点数或双精度时的准确度,我想出了这个答案:

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

        • 浮动:1.6955566 米
        • 双:3.1582203519064933E-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);
          }
        }
        

        我知道这是一个旧线程,但我在搜索问题时发现了它。对于大多数应用程序来说,浮点数很可能就足够了。有问题的 Apple 设备的 GPS 可能没有比这更好的精度。但只要数据不是问题,存储双精度数会更容易。

        【讨论】:

        • 我刚刚意识到我还需要在另一个方向上制作具有最大错误的毕达哥拉斯。所以差一点。 :)
        【解决方案4】:

        最近,我认为在可转换属性中将坐标存储为 NSValue 在 Core Data 中更容易:

        [NSValue valueWithMKCoordinate:coordinate]
        

        https://developer.apple.com/documentation/foundation/nsvalue/1452193-valuewithmkcoordinate

        【讨论】:

          猜你喜欢
          • 2017-05-14
          • 2011-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多