gallivm: Use nextafterf(0.5, 0.0) as rounding constant
The common truncf(x + 0.5) fails for the floating-point value just less than 0.5 (nextafterf(0.5, 0.0)). nextafterf(0.5, 0.0) + 0.5, after rounding is 1.0, thus truncf does not produce the desired value. The solution is to add nextafterf(0.5, 0.0) instead of 0.5 before truncating. This works for all values. Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
@@ -2477,7 +2477,7 @@ lp_build_iround(struct lp_build_context *bld,
|
||||
else {
|
||||
LLVMValueRef half;
|
||||
|
||||
half = lp_build_const_vec(bld->gallivm, type, 0.5);
|
||||
half = lp_build_const_vec(bld->gallivm, type, nextafterf(0.5, 0.0));
|
||||
|
||||
if (type.sign) {
|
||||
LLVMTypeRef vec_type = bld->vec_type;
|
||||
|
||||
Reference in New Issue
Block a user