From bf54de498416146bb6057ef5589476d361e4c2e6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 17 Mar 2013 09:07:55 -0700 Subject: Use less math to clamp floats to -1...+1 The previous code could have issues as precision lowers. This should hopefully work better while only using one if check instead of two. --- Alc/ALu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Alc') diff --git a/Alc/ALu.c b/Alc/ALu.c index 282053c7..3cd70455 100644 --- a/Alc/ALu.c +++ b/Alc/ALu.c @@ -916,9 +916,9 @@ static __inline ALfloat aluF2F(ALfloat val) { return val; } static __inline ALint aluF2I(ALfloat val) { - /* Clamp the value between -1 and +1. This handles that without branching. */ - val = val+1.0f - fabsf(val-1.0f); - val = (val-2.0f + fabsf(val+2.0f)) * 0.25f; + /* Clamp the value between -1 and +1. This handles that with only a single branch. */ + if(fabsf(val) > 1.0f) + val = (0.0f < val) - (val < 0.0f); /* Convert to a signed integer, between -2147483647 and +2147483647. */ return fastf2i((ALfloat)(val*2147483647.0)); } -- cgit v1.2.3