public override void Crossover( IChromosome pair )
{
BinaryChromosome p = (BinaryChromosome) pair;
// check for correct pair
if ( ( p != null ) && ( p.length == length ) )
{
int crossOverPoint = 63 - rand.Next( length - 1 );
ulong mask1 = 0xFFFFFFFFFFFFFFFF >> crossOverPoint;
ulong mask2 = ~mask1;
ulong v1 = val;
ulong v2 = p.val;
// calculate new values
val = ( v1 & mask1 ) | ( v2 & mask2 );
p.val = ( v2 & mask1 ) | ( v1 & mask2 );
}
}
}