首页 > 解决方案 > 如何有效地通过网络发送受约束的双精度值

问题描述

我对网络编程很陌生。

我需要通过网络发送一个由双精度组成的纬度经度对。我正在两端编码,所以我可以使用我喜欢的任何方法。现在。我将两者都直接转换为字节并发送整个 16 个字节。

我想知道的是,是否最好将每个除以最大可能值(分别为 90 和 180)然后乘以 Int32.MaxValue 然后在发送前转换为 int。显然,这会将发送的数据减半,但我无法计算出我会损失多少精度。

有谁知道如何计算这个?

标签: c#performancenetworkingprecision

解决方案


您从 53(双精度/二进制 64 有效位Wikipedia IEEE_754类型)下降到 32(整数类型)位 - 双精度表示的 15-16 位十进制数字中损失了 21 位或大约 6 位十进制数字(2^21 ~= 2,000,000)。

您的应用需要什么精度?你的纬度和经度坐标是度数吗?在赤道,1 度(纬度或经度)大约为 110 公里,因此 3 位有效数字使您的分辨率约为 100 公里,5 位数字约为 1 公里,8 位数字约为 1 米,10 位数字(您希望通过变换获得的最佳分辨率) 〜10厘米。

这只是数量级的经验法则,可以给你一个想法。如果您的坐标必须解析到小于 10m,您应该谨慎行事。


推荐阅读