gpt4 book ai didi

c - 单精度 float 在零附近时的近似分辨率是多少

转载 作者:太空狗 更新时间:2023-10-29 16:58:57 27 4
gpt4 key购买 nike

我将许多经度和纬度存储为 doubles,我想知道我是否可以将它们存储为 floats

要回答这个问题,我需要知道 single precision floating point number 的近似分辨率当存储的值为经度/纬度(-180 到 +180)时。

最佳答案

您的问题可能有多种解释。

如果它只是用于角度和存储在磁盘或设备上,我建议您使用完全不同的技术存储您的值:存储为 32 位整数。

int encodedAngle = (int)(value * (0x7FFFFFFF / 180.0));

要恢复它,请反其道而行之。

double angle = (encodedAngle / (0x7FFFFFFF / 180.0));

通过这种方式,您可以获得 180 度的完整 31 位分辨率和符号的 1 位。

您也可以使用这种方式将您的值保存在 ram 中,与直接使用 double 相比,这种转换的成本更高,但是如果您想要保持低内存但分辨率高,这可以很好地工作。成本不是那么高,只是从/到整数的转换和乘法,现代处理器将在非常短的时间内完成,并且由于访问的内存较少,如果列表包含很多值,您的代码将对处理器缓存更加友好。

你的分辨率将是 180/((2^31) - 1) = 8.38190318 × 10^-8 度,不错 :)

关于c - 单精度 float 在零附近时的近似分辨率是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com