The idea is that ({Ci}AND {Di}) yields a bit vector with two ones for every marker where genotype data is present for both samples, and two 0 s elsewhere, so 2|Ia,b| is equal to the number of ones in that bit vector; while (({Ai}XOR {Bi})AND {Ci}AND {Di}) yields a bit vector with a 1 for every nucleotide difference. Refer to Additional file 1 [8] for more computational details. Our timing data (see “Performance comparisons” below) indicate that this algorithm takes less than twice as long to handle a 960-marker block as PLINK 1.07 takes to handle a single marker.