in cpp/src/array_utils.h [227:250]
void normalizeVector(const float *data, data_t *norm_array, int dimensions) {
dist_t norm = 0.0;
for (int i = 0; i < dimensions; i++) {
if constexpr (scalefactor::num != scalefactor::den) {
dist_t point = (dist_t)(data[i] * (dist_t)scalefactor::num) /
(dist_t)scalefactor::den;
norm += point * point;
} else {
norm += data[i] * data[i];
}
}
norm = 1.0f / (sqrtf(norm) + 1e-30f);
for (int i = 0; i < dimensions; i++) {
if constexpr (scalefactor::num != scalefactor::den) {
dist_t element =
(data[i] * (dist_t)scalefactor::num) / (dist_t)scalefactor::den;
dist_t normalizedElement = element * norm;
norm_array[i] = (normalizedElement * scalefactor::den) / scalefactor::num;
} else {
dist_t new_value = data[i] * norm;
norm_array[i] = new_value;
}
}
}