On 27 September 2011 10:12, Chad Versace <c...@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 >> 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. >> >> Fixes piglit tests >> spec/glsl-1.30/execution/**built-in-functions/[fv]s-**asinh-*. >> --- >> 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 <c...@chad-versace.us> > > -- > Chad Versace > c...@chad-versace.us >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev