Version 9.2.1

July 31, 2026

Release Notes

Improvements

This update improves the speed of sparse_vector_scanner searches, particularly searches involving sparse_vector_float objects, by adding new internal methods.

Reasons for Improvements

  • Removed the creation of a new internal unsigned int scanner with every single search, and now the internal scanner is only created once
  • Added an internal mask so that when a float search based on a previous search occurs, it does not search the entire sparse vector
  • Reduced the amount of times decompression of an internal bvector occurs

Performance Analysis Data

Comparing time to run 1,000 find_range_float searches between 9.1.0 and 9.2.1

Each vector has 20 million elements

std::vector linearly goes over every element in the vector.

Implementation Linear Data 9.1.0 Random Data 9.1.0 Linear Data 9.2.1 Random Data 9.2.1
std::vector 52 83.34 52 83.34
sparse_vector_scanner 0.8433 12.88 0.64 14.66
std::vector (35% NaN) 58.46 69.18 58.46 69.18
RSC sparse_vector_scanner (35% Null) 89.5 479.28 41.59 150
Graph comparing time to run 1,000 find_range_float searches on vectors with 20 million elements

New Methods

  • sparse_vector_scanner::find_range_float_unbounded — finds every value in an open interval, unlike the existing find_range_float method

New Samples

  • xsample11: Demonstrates uses for sparse_vector_float objects with financial data

Fixes

  • Fixed a major bug in bvector<>::bit_or_and() where the target block was not preserved when AND produces an empty block

GitHub Releases

Follow us on Twitter