implement generic * / + -