Skip to content
BitVecCosineSimilarity

BitVecCosineSimilarity

BitVecCosineSimilarity

Description

Calculate cosine similarity between two bitvectors. Treats bitvectors as binary vectors and computes cosine of angle between them.

Parameters

Name Direction Description
bv1 in First bitvector
bv2 in Second bitvector

Usage example (from documentation)

  double similarity = BitVecCosineSimilarity(&bv1, &bv2);

Returns

Cosine similarity coefficient (0.0 to 1.0)

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    double BitVecCosineSimilarity(BitVec *bv1, BitVec *bv2) {
        ValidateBitVec(bv1);
        ValidateBitVec(bv2);
    // Test BitVecCosineSimilarity basic functionality
    bool test_bitvec_cosine_similarity_basic(void) {
        WriteFmt("Testing BitVecCosineSimilarity basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVecPush(&bv2, true);
    
        double similarity = BitVecCosineSimilarity(&bv1, &bv2);
        result            = result && (fabs(similarity - 1.0) < 0.001);
        BitVecPush(&bv2, true);
    
        similarity = BitVecCosineSimilarity(&bv1, &bv2);
        result     = result && (fabs(similarity - 0.0) < 0.001);
    // Test BitVecCosineSimilarity edge cases
    bool test_bitvec_cosine_similarity_edge_cases(void) {
        WriteFmt("Testing BitVecCosineSimilarity edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVecPush(&bv2, false);
    
        double similarity = BitVecCosineSimilarity(&bv1, &bv2);
        result            = result && (similarity == 0.0);
        BitVecPush(&bv2, false);
    
        similarity = BitVecCosineSimilarity(&bv1, &bv2);
        result     = result && (similarity == 0.0);
        u64    hamming     = BitVecHammingDistance(&bv1, &bv2);
        double jaccard     = BitVecJaccardSimilarity(&bv1, &bv2);
        double cosine      = BitVecCosineSimilarity(&bv1, &bv2);
        u64    dot_prod    = BitVecDotProduct(&bv1, &bv2);
        double correlation = BitVecCorrelation(&bv1, &bv2);
    
    bool test_bitvec_cosine_similarity_null_bv1(void) {
        WriteFmt("Testing BitVecCosineSimilarity(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecCosineSimilarity(NULL, &bv2);
        BitVecDeinit(&bv2);
        return true;
    
    bool test_bitvec_cosine_similarity_null_bv2(void) {
        WriteFmt("Testing BitVecCosineSimilarity(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecCosineSimilarity(&bv1, NULL);
        BitVecDeinit(&bv1);
        return true;
Last updated on