added equals() with tolerance