public static void Main(string[] args)
const ulong mask = 2196870UL;
const ulong input = 15378090UL;
Console.WriteLine(dendrite(input, mask));
static float dendrite(ulong input, ulong mask)
ulong samebits = mask & ~(input ^ mask);
int correct = cardinality(samebits);
int inmask = cardinality(mask);
return inmask == 0 ? 0f : correct / (float)inmask;
static int cardinality(ulong word)
const ulong mult = 0x0101010101010101;
const ulong mask1h = (~0UL) / 3 << 1;
const ulong mask2l = (~0UL) / 5;
const ulong mask4l = (~0UL) / 17;
word -= (mask1h & word) >> 1;
word = (word & mask2l) + ((word >> 2) & mask2l);
return (int)((word * mult) >> 56);