压缩具有指定范围和精度的浮点数

pav*_*lou 4 java compression floating-point

在我的应用程序中,我将使用浮点值来存储地理坐标(纬度和经度).

我知道,这些值的整数部分将在范围[-90, 90][-180, 180]分别.此外,我还要求对这些值强制执行一些固定的精度(现在可以,0.00001但以后可以更改).

在研究单精度浮点类型(float)之后,我可以看到包含我的值只是有点小.那是因为180 * 10^5大于2^24(浮点数的有效数的大小)但小于2^25.

所以我必须使用双倍.但问题是我要存储大量的这些值,所以我不想浪费字节,存储不必要的精度.

那么在将我的double值(具有固定的整数部分范围和指定的精度X)转换为java中的字节数组时,如何执行某种压缩?因此,例如,如果我使用示例(0.00001)的精度,我最终为每个值5个字节.我正在寻找一种轻量级的算法或解决方案,因此它并不意味着大量的计算.

Ton*_*nyK 6

要将数字存储x到固定精度(例如)0.00001,只需存储最接近的整数100000 * x.(顺便说一句,这需要26位,而不是25位,因为你也需要存储负数.)

  • @pavel,无论你使用什么方法,都会有任意相互靠近的数字,它们被存储为不同的压缩数字.否则所有数字都必须存储相同!想一想...... (2认同)