[Mesa-dev] [PATCH] glsl 1.30: Fix numerical instabilities in asinh
stereotype441 at gmail.com
Tue Sep 27 10:14:11 PDT 2011
On 27 September 2011 10:12, Chad Versace <chad at chad-versace.us> wrote:
> On 09/26/2011 04:19 PM, Paul Berry wrote:
>> The formula we were previously using for asinh:
>> asinh x = ln(x + sqrt(x * x + 1))
>> is numerically unstable: when x is a large negative value, the quantity
>> x + sqrt(x * x + 1)
>> is a small positive value (on the order of 1/(2|x|)). Since the
>> logarithm function is very sensitive in this range, any error in the
>> computation of the square root manifests as a large error in the
>> This patch changes the formula to:
>> asinh x = sign(x) * ln(abs(x) + sqrt(x * x + 1))
>> which is only slightly more expensive to compute, and is numerically
>> stable for all x.
>> Fixes piglit tests
>> src/glsl/builtins/ir/asinh | 40 ++++++++++++++++++++++++++++++**
>> 1 files changed, 36 insertions(+), 4 deletions(-)
> I would mention in the commit message that the new formula is
> equivalent to the old. This isn't evident at first glance, and I
> first thought that the new was perhaps just a good, stable approximation
> of the old.
Good point. I'll update the commit message. Thanks for the review.
> Reviewed-by: Chad Versace <chad at chad-versace.us>
> Chad Versace
> chad at chad-versace.us
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the mesa-dev