【发布时间】:2016-12-07 13:34:17
【问题描述】:
我试图了解浮点数是如何存储在 SolR 中的。 我在 PHP(32 位)中的浮点值和 SolR 中存储的浮点值之间存在差异。
我在“SolR 包含的字段类型”文档中进行了搜索:
https://cwiki.apache.org/confluence/display/solr/Field+Types+Included+with+Solr
并为 TrieFloatField 找到:
浮点字段(32 位 IEEE 浮点)。精度步=“0” 实现高效的数字排序并最小化索引大小; precisionStep="8"(默认)启用高效的范围查询。
但我不知道如何估计存储值。 这是我所做的一些测试。 我尝试在浮点字段中插入的值和结果:
ok: 2097151.1
ko: 2097152.1 -> 2097152
ko: 20971521 -> 20971520
ok: 16777216
ko: 16777217 -> 16777216
ko: 4294967296 -> 4294967300
ok: 4294967300
ko: 4294967301 -> 4294967300
我不明白使用了哪个约束,它不是四舍五入的。 也许它是一个二元约束,因为它看起来像是被四舍五入以适应 2 的幂。
https://en.wikipedia.org/wiki/Power_of_two#The_first_96_powers_of_two
2^21 = 2,097,152
2^24 = 16,777,216
2^32 = 4,294,967,296
如您所见,这些值与 SolR 存储的值接近。
有人知道 SolR 商店是如何浮动的吗? 以及如何用 PHP 评估它?
谢谢。
【问题讨论】:
标签: php solr binary floating-point