public float getNormalizedScore(int a, int b, boolean useLibrary) throws LSHException {
		float baseScore = getScore(a, b);
		float selfA = getSelfScore(a);
		float selfB = getSelfScore(b);
		// If selfA is bigger use selfB for library, selfA otherwise
		if (selfA < selfB) {			// If selfB is bigger
			useLibrary = !useLibrary;	//    flip this
		}
		if (useLibrary) {
			if (selfB == 0.0f) {
				return -1.0f;
			}
			return baseScore / selfB;
		}
		if (selfA == 0.0) {
			return -1.0f;
		}
		return baseScore / selfA;
	}
Computes a score comparing two executables, normalized between 0.0 and 1.0,
indicating the percentage of functional similarity between the two.
1.0 means "identical" 0.0 means completely "dissimilar"
@param a is the index of the first executable
@param b is the index of the second executable
@param useLibrary is true if the score measures percent "containment"
         of the smaller executable in the larger.
@return the normalized score
@throws LSHException if the self-scores for either executable are not available
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/ExecutableScorer.java