evaluate now works for all operators, uses doubles instead of floats