float getDistance()

in cpp/src/TypedIndex.h [253:285]


  float getDistance(std::vector<float> _a, std::vector<float> _b) {
    if ((int)_a.size() != dimensions || (int)_b.size() != dimensions) {
      throw std::runtime_error("Index has " + std::to_string(dimensions) +
                               " dimensions, but received vectors of size: " +
                               std::to_string(_a.size()) + " and " +
                               std::to_string(_b.size()) + ".");
    }

    int actualDimensions =
        useOrderPreservingTransform ? dimensions + 1 : dimensions;

    std::vector<data_t> a(actualDimensions);
    std::vector<data_t> b(actualDimensions);

    if (useOrderPreservingTransform) {
      size_t dotFactorA = getDotFactorAndUpdateNorm(_a.data());
      _a.push_back(dotFactorA);
      size_t dotFactorB = getDotFactorAndUpdateNorm(_b.data());
      _b.push_back(dotFactorB);
    }

    if (normalize) {
      normalizeVector<dist_t, data_t, scalefactor>(_a.data(), a.data(),
                                                   a.size());
      normalizeVector<dist_t, data_t, scalefactor>(_b.data(), b.data(),
                                                   b.size());
    } else {
      floatToDataType<data_t, scalefactor>(_a.data(), a.data(), a.size());
      floatToDataType<data_t, scalefactor>(_b.data(), b.data(), b.size());
    }

    return spaceImpl->get_dist_func()(a.data(), b.data(), actualDimensions);
  }