standards/83845: [ patch ] add log2() and log2f() support for libm

Roman Bogorodskiy bogorodskiy at gmail.com
Thu Jul 21 18:50:33 GMT 2005


The following reply was made to PR standards/83845; it has been noted by GNATS.

From: Roman Bogorodskiy <bogorodskiy at gmail.com>
To: David Schultz <das at FreeBSD.ORG>
Cc: FreeBSD-gnats-submit at FreeBSD.ORG
Subject: Re: standards/83845: [ patch ] add log2() and log2f() support for libm
Date: Thu, 21 Jul 2005 22:51:31 +0400

  David wrote:
 
 > Though this seems like a reasonable approach, it leads to
 > significant rounding errors since it requires dividing an inexact
 > result (ln(x) rounded to 52 bits) by another inexact quantity
 > (ln(2) rounded to 52 bits).  For instance, I suspect that if you
 > computed log2(2), log2(4), log2(8), log2(16), ... using your
 > implementation, the results would not always be exact.
 > Technically speaking I don't think they are required to be exact,
 > but common sense suggests that they ought to be.
 
 Is not it exact?
 
 $> ./a.out=20
 log2(2) =3D 1.0000000000000000000000
 log2(4) =3D 2.0000000000000000000000
 log2(8) =3D 3.0000000000000000000000
 log2(16) =3D 4.0000000000000000000000
 $>=20
 
 It's exact enough for me.
 
 > A more minor objection is that log2() can be computed more quickly
 > than log(), but this impelementation does it less quickly.  This
 > isn't such a big deal, though; I'm more concerned about the
 > problem that accuracy guarantees will be significantly weaker than
 > for other routines in libm.
 
 Ok. You know, log2() confirms to C99 and some apps become to use it now. Su=
 re,=20
 it's not problem for me to add hacks like #define log2(x) log(x)/log(2) whi=
 le=20
 you're looking for the ideal solution.
 
 Roman Bogorodskiy


More information about the freebsd-standards mailing list