c# - 如何有效地通过网络发送受约束的双精度值
问题描述
我对网络编程很陌生。
我需要通过网络发送一个由双精度组成的纬度经度对。我正在两端编码,所以我可以使用我喜欢的任何方法。现在。我将两者都直接转换为字节并发送整个 16 个字节。
我想知道的是,是否最好将每个除以最大可能值(分别为 90 和 180)然后乘以 Int32.MaxValue 然后在发送前转换为 int。显然,这会将发送的数据减半,但我无法计算出我会损失多少精度。
有谁知道如何计算这个?
解决方案
您从 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,您应该谨慎行事。
推荐阅读
- ruby-on-rails - 如何在 Ruby on Rails 上上传和显示图像而不存储它们?
- sql-server - 如何添加计算列:子查询返回超过 1 个值
- ios - WebView 退出时注销帐户/清除导航
- javascript - 如何使用 node.js 修改我的 HTML 文件?
- javascript - 如何正确处理 ASP.NET Core MVC 中的 AJAX 错误?
- azure-ad-b2c - 在 Azure AD B2C 自定义策略中调用 api 以进行邮政地址验证
- flutter - 如何处理具有相同动画的大量元素?
- python - AZURE ML,python 代码获取:'tls_process_server_certificate','证书验证失败'
- excel - VBA 运行时错误。'1004':复制区域和粘贴区域的大小不同
- python - 从睡眠模式通过python代码打开监视器