made _validate_impl less strict, allowing for loss of precision on cast