On the effectiveness of metamorphic testing for numerical programs