added negate implementation