Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Apr 2017 18:01:22 -0700
From:      Steve Kargl <sgk@troutmask.apl.washington.edu>
To:        freebsd-numerics@freebsd.org
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Implementation of half-cycle trignometric functions
Message-ID:  <20170428010122.GA12814@troutmask.apl.washington.edu>
In-Reply-To: <20170427231411.GA11346@troutmask.apl.washington.edu>
References:  <20170409220809.GA25076@troutmask.apl.washington.edu> <20170427231411.GA11346@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Apr 27, 2017 at 04:14:11PM -0700, Steve Kargl wrote:
> 
> I have attached a new diff to the bugzilla report.  The 
> diff is 3090 lines and won't be broadcast the mailing list.
> 
> This diff includes fixes for a few inconsequential bugs
> and implements modified Estrin's method for sum a few
> ploynomials.  If you want the previous Horner's method
> then add -DHORNER to your CFLAGS.
> 

For those curious about testing, here are some numbers
for the Estrin's method.  These were obtained on an AMD
FX(tm)-8350 @ 4018.34-MHz.  The times are in microseconds
and the number in parentheses are estimated cycles.

            |    cospi     |    sinpi     |    tanpi
------------+--------------+--------------+--------------
float       | 0.0089 (37)  | 0.0130 (54)  | 0.0194 (80)
double      | 0.0134 (55)  | 0.0160 (66)  | 0.0249 (102)
long double | 0.0557 (228) | 0.0698 (287) | 0.0956 (393)
------------+--------------+--------------+--------------

The timing tests are done on the interval [0,0.25] as
this is the interval where the polynomial approximations
apply.  Limited accuracy testing gives

                 |   cospif   |   cospi    |  cospil
-----------------+------------+------------+-------------
         MAX ULP | 0.88242114 | 0.89339466 | 0.88799449
    Total tested | 16777214   | 16777214   | 16777214
0.8 < ULP <= 0.9 | 1613       | 1682       | 1601
0.7 < ULP <= 0.8 | 33925      | 33817      | 33843
0.6 < ULP <= 0.7 | 171799     | 172775     | 171899
-----------------+------------+------------+-------------

                 |   sinpif   |   sinpi    |  sinpil
-----------------+------------+------------+-------------
         MAX ULP | 0.80103672 | 0.79851085 | 0.77049407
    Total tested | 16777214   | 16777214   | 16777214
0.8 < ULP <= 0.9 | 1          | 0          | 0
0.7 < ULP <= 0.8 | 727        | 1075       | 546
0.6 < ULP <= 0.7 | 19268      | 22722      | 19019
-----------------+------------+------------+-------------

 x in [0,0.25]   |   tanpif   |   tanpi    |   tanpil
-----------------+------------+------------+-------------
         MAX ULP | 1.37954760 | 1.37300168 | 1.38800823
    Total tested | 16777214   | 16777214   | 16777214
1.0 < ULP        | 39109      | 38712      | 38798
0.9 < ULP <= 1.0 | 130373     | 131086     | 130803
0.8 < ULP <= 0.9 | 342624     | 341350     | 341155
0.7 < ULP <= 0.8 | 687244     | 687122     | 686814
0.6 < ULP <= 0.7 | 1078964    | 1079881    | 1078555
-----------------+------------+------------+-------------

In the interval [0.25,0.5] tanpi[fl] is computed by 
cospi / sinpi.  The numbers look like 

 x in [0.25,0.5] |   tanpif   |   tanpi    |   tanpil
-----------------+------------+------------+-------------
         MAX ULP | 1.93529165 | 2.04485533 | 1.95823689
    Total tested | 16777215   | 16777215   | 16777215
1.0 < ULP        | 699310     | 701244     | 698946
0.9 < ULP <= 1.0 | 442978     | 443344     | 443599
0.8 < ULP <= 0.9 | 642991     | 642561     | 642601
0.7 < ULP <= 0.8 | 889357     | 890307     | 889233
0.6 < ULP <= 0.7 | 1176473    | 1177407    | 1177121
-----------------+------------+------------+-------------

-- 
Steve
20170425 https://www.youtube.com/watch?v=VWUpyCsUKR4
20161221 https://www.youtube.com/watch?v=IbCHE-hONow



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170428010122.GA12814>