[Mesa-dev] [PATCH] glsl 1.30: Fix numerical instabilities in asinh

Eric Anholt eric at anholt.net
Tue Sep 27 10:43:10 PDT 2011


On Mon, 26 Sep 2011 16:19:55 -0700, Paul Berry <stereotype441 at gmail.com> 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
> result.
> 
> 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.

Reviewed-by: Eric Anholt <eric at anholt.net>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20110927/af4fb168/attachment.pgp>


More information about the mesa-dev mailing list