[FFmpeg-devel] [PATCH 3/3] lavu/internal: tighten errors for avpriv_exp10

Michael Niedermayer michael at niedermayer.cc
Sat Dec 26 12:37:30 CET 2015


On Fri, Dec 25, 2015 at 08:10:16PM -0800, Ganesh Ajjanagadde wrote:
> On Fri, Dec 25, 2015 at 9:11 AM, Ganesh Ajjanagadde
> <gajjanagadde at gmail.com> wrote:
> > This tightens the errors by doing a first order Taylor approximation of
> > one obvious source of error. This results in negligible runtime
> > slowdown, but improves worst case relative error by ~ 30%, worst case
> > ulp count from  673 to 391. Another illustration is:
> > arg   : -303.137207600000010643270798027515
> > exp10 : 7.2910890073523505e-304, 2 ulp
> > exp10l: 7.2910890073523489e-304, 0 ulp
> > simple: 7.2910890073526541e-304, 377 ulp
> > corr  : 7.2910890073524274e-304, 97 ulp
> > real  : 7.2910890073523489e-304, 0 ulp
> > next  : 7.2910890073533033e-304, 1178 ulp
> > prev  : 7.2910890073513954e-304, 1178 ulp
> >
> > where next, prev denote:
> > exp10l(nextafter(x, INFINITY))
> > exp10l(nextafter(x, -INFINITY)),
> > and simple the exp2(M_LOG2_10 * x), corr this approach.
> >
> > Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> > ---
> >  libavutil/internal.h | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/libavutil/internal.h b/libavutil/internal.h
> > index ae11601..b6d72b7 100644
> > --- a/libavutil/internal.h
> > +++ b/libavutil/internal.h
> > @@ -304,7 +304,9 @@ static av_always_inline av_const int64_t ff_rint64_clip(double a, int64_t amin,
> >   */
> >  static av_always_inline double avpriv_exp10(double x)
> >  {
> > -    return exp2(M_LOG2_10 * x);
> > +    /* log(2)*(log2(10) - (double)log2_10) */
> > +    static const double log2_10_eps = 1.02495895001049072e-16;
> > +    return exp2(M_LOG2_10 * x) * (1 + log2_10_eps * x);
> >  }
> >
> >  static av_always_inline float avpriv_exp10f(float x)
> > --
> > 2.6.4
> >
> 
> Michael: I don't recall you opposing this, but I also recall that you
> don't believe this is useful. It will make me feel a bit better about
> ff_exp10 if this goes in, so at what level (percentage) of runtime
> slowdown are you willing to accept this?

i dont know if the speed difference of exp10 really matters for any
speed relevant code (probably not) and i dont know if the accuracy
increase really matters for any code either
so its weighting 2 "dont knows" against each other
i cant really say what is better

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151226/8da0295e/attachment.sig>


More information about the ffmpeg-devel mailing list