|
6 | 6 | * |
7 | 7 | * Contains following similarity measures: |
8 | 8 | * |
9 | | - * - Bit-level Hamming distance → @c u32 counter |
10 | | - * - Bit-level Jaccard distance (Tanimoto coefficient) → @c f32 ratio |
11 | | - * - Jaccard distance for @c u32 integral MinHash vectors from StringZilla → @c f32 ratio |
12 | | - * - TODO: Weighted Jaccard distance for @c u32 integral Count-Min-Sketch vectors → @c f32 ratio |
| 9 | + * - Bit-level Hamming distance → `u32` counter |
| 10 | + * - Bit-level Jaccard distance (Tanimoto coefficient) → `f32` ratio |
| 11 | + * - Jaccard distance for `u32` integral MinHash vectors from StringZilla → `f32` ratio |
| 12 | + * - TODO: Weighted Jaccard distance for `u32` integral Count-Min-Sketch vectors → `f32` ratio |
13 | 13 | * |
14 | 14 | * For hardware architectures: |
15 | 15 | * |
@@ -343,26 +343,10 @@ SIMSIMD_INTERNAL void simsimd_jaccard_b128_init_serial(simsimd_jaccard_b128_stat |
343 | 343 |
|
344 | 344 | SIMSIMD_INTERNAL void simsimd_jaccard_b128_update_serial(simsimd_jaccard_b128_state_serial_t *state, |
345 | 345 | simsimd_b128_vec_t a, simsimd_b128_vec_t b) { |
346 | | - simsimd_u64_t intersection_lo = a.u64s[0] & b.u64s[0]; |
347 | | - simsimd_u64_t intersection_hi = a.u64s[1] & b.u64s[1]; |
348 | | - |
349 | | - // Unrolled lookup table popcount for portability |
350 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo)); |
351 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 8)); |
352 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 16)); |
353 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 24)); |
354 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 32)); |
355 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 40)); |
356 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 48)); |
357 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_lo >> 56)); |
358 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi)); |
359 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 8)); |
360 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 16)); |
361 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 24)); |
362 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 32)); |
363 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 40)); |
364 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 48)); |
365 | | - state->intersection_count += simsimd_popcount_b8((simsimd_b8_t)(intersection_hi >> 56)); |
| 346 | + simsimd_u64_t intersection_low = a.u64s[0] & b.u64s[0]; |
| 347 | + simsimd_u64_t intersection_high = a.u64s[1] & b.u64s[1]; |
| 348 | + state->intersection_count += _simsimd_u64_popcount(intersection_low); |
| 349 | + state->intersection_count += _simsimd_u64_popcount(intersection_high); |
366 | 350 | } |
367 | 351 |
|
368 | 352 | SIMSIMD_INTERNAL void simsimd_jaccard_b128_finalize_serial( |
|
0 commit comments