如何有效地通过网络发送受约束的双精度值
How to send a constrained double value over a network efficiently
我对网络编程还很陌生。
我需要通过网络发送由双打组成的经纬度对。我正在两端编码,所以我可以使用我喜欢的任何方法。
现在。我将两者都直接转换为字节并发送整个 16 个字节。
我想知道的是,如果将每个除以最大可能值(分别为 90 和 180)然后乘以 Int32.MaxValue 然后在发送前转换为 int 可能会更好。
显然,这会使发送的数据减半,但我不知道我会失去多少精度。
有人知道怎么计算吗?
您从 53(类型 double/binary64 有效数 Wikipedia IEEE_754)减少到 32(类型整数)位 - 损失了 21 位或大约 6 个小数位 (2^21 ~= 2,000,000) double 表示的 15-16 位十进制数字。
您的应用程序需要什么精度?你的纬度和经度坐标是度数吗?在赤道 1 度(纬度或经度)大约为 110 公里,因此 3 位有效数字使您的分辨率约为 100 公里,5 位数字约为 1 公里,8 位数字约为 1 米,10 位数字(您可以希望通过变换获得的最佳分辨率) ~10cm.
这只是按数量级排序的经验法则,旨在为您提供一个概念。如果您的坐标必须解析为小于 10m,则应谨慎行事。
我对网络编程还很陌生。
我需要通过网络发送由双打组成的经纬度对。我正在两端编码,所以我可以使用我喜欢的任何方法。 现在。我将两者都直接转换为字节并发送整个 16 个字节。
我想知道的是,如果将每个除以最大可能值(分别为 90 和 180)然后乘以 Int32.MaxValue 然后在发送前转换为 int 可能会更好。 显然,这会使发送的数据减半,但我不知道我会失去多少精度。
有人知道怎么计算吗?
您从 53(类型 double/binary64 有效数 Wikipedia IEEE_754)减少到 32(类型整数)位 - 损失了 21 位或大约 6 个小数位 (2^21 ~= 2,000,000) double 表示的 15-16 位十进制数字。
您的应用程序需要什么精度?你的纬度和经度坐标是度数吗?在赤道 1 度(纬度或经度)大约为 110 公里,因此 3 位有效数字使您的分辨率约为 100 公里,5 位数字约为 1 公里,8 位数字约为 1 米,10 位数字(您可以希望通过变换获得的最佳分辨率) ~10cm.
这只是按数量级排序的经验法则,旨在为您提供一个概念。如果您的坐标必须解析为小于 10m,则应谨慎行事。