| 122 | /// its nearest centroids, and the distance is computed in FP32. |
| 123 | #[inline] |
| 124 | fn fast_symmetric_distance(&self, q: &Self::Quantized, v: &Self::Quantized) -> f32 { |
| 125 | let dq_a = self |
| 126 | .decode(packed_bits_of(q)) |
| 127 | .expect("PqCodec::fast_symmetric_distance: decode failed"); |
| 128 | let dq_b = self |
| 129 | .decode(packed_bits_of(v)) |
| 130 | .expect("PqCodec::fast_symmetric_distance: decode failed"); |
| 131 | dq_a.iter() |
| 132 | .zip(dq_b.iter()) |
| 133 | .map(|(&a, &b)| { |
| 134 | let d = a - b; |
| 135 | d * d |
| 136 | }) |
| 137 | .sum() |
| 138 | } |
| 139 | |
| 140 | /// Asymmetric ADC distance: precomputed distance table vs stored code. |
| 141 | /// |