Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.forth > #135460
| From | Krishna Myneni <krishna.myneni@ccreweb.org> |
|---|---|
| Newsgroups | comp.lang.forth |
| Subject | Re: Range Reduction Using Big Number Arithmetic |
| Date | 2026-08-28 10:39 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <116sa3b$2dpj8$4@dont-email.me> (permalink) |
| References | <115pm90$3cl9h$1@dont-email.me> <1168f21$bnk$1@dont-email.me> |
On 8/20/26 22:01, Krishna Myneni wrote:
> On 8/15/26 07:32, Krishna Myneni wrote:
>> A simple Forth implementation for reducing large angles (|x| > 500000
>> rad) for accurate evaluation by the x87 native fpu trig instructions
>> FSIN FCOS FSINCOS FTAN is given below. The Forth code relies on the
>> Forth Scientific Library (FSL #47) big number arithmetic module.
> ...
>>
>> FREDUCE-RANGE ( F: x -- x' )
>>
>> With the present implementation, the argument x is limited to a range,
>>
>> |x| < 9.2e18 ( radians )
>>
>> Test results of the effect of range reduction implementation on the
>> accuracy of the native FSIN instruction are provided. Shown is the
>> rapid loss of accuracy for |x| > 10^6 rad when providing x as the
>> argument to the native FSIN fpu instruction (only 3 significant digits
>> at x = 1e18 rad). In contrast, the reduced-range angle, x', computed
>> by FREDUCE- RANGE maintains 14 to 15 significant digits in the result
>> of FSIN over the range of x stated above. A vertical separator "|"
>> shows the decimal place where the native FSIN result deviates from the
>> range-reduced result. Note how quickly the separator moves to the left
>> as the angle argument is increased by factors of 10.
>>
> ...
>> If you are using a C-based Forth, the libc function may or may not
>> provide range-reduction. Comparison with the GNU library function
>>
>> sin( x ),
>>
>> which does perform range-reduction is shown in the test results.
>>
...
One can examine the glibc code for double precision sin(x) at the link
below.
https://github.com/bminor/glibc/blob/6059938728a98270b9706488887f43baa0471eba/sysdeps/ieee754/dbl-64/s_sin.c
=== clip from above file ===
...
/*******************************************************************/
/* An ultimate sin routine. Given an IEEE double machine number x */
/* it computes the rounded value of sin(x). */
/*******************************************************************/
#ifndef IN_SINCOS
double
SECTION
__sin (double x)
{
...
=== end of clip ===
There are several ranges of the input parameter x, each of which are
handled differently:
I. 2^-26 < |x| < 0.855469; no range reduction needed
II. 0.855469 < |x| < 2.426265; ?
III. 2.426265 < |x| < 105414350; uses function reduce_sincos()
IV. 105414350 < |x| < 2^1024; uses function _branred()
V. 105414350 < |x| < 2^1024; set error condition
The only ranges where it looks like it is performing range reduction on
the argument are III and IV, above which the double-precision number is
out of range. In II, the argument is being shifted by a constant,
probably pi/4, and its cosine is being evaluated and the sign is adjusted.
It will be interesting to see the details of branred().
--
KM
Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-08-15 07:32 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-08-15 07:48 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-08-20 22:01 -0500
Re: Range Reduction Using Big Number Arithmetic albert@spenarnc.xs4all.nl - 2026-08-22 19:31 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-08-31 08:49 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-08-28 10:39 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-08-28 10:42 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-03 18:03 -0500
Re: Range Reduction Using Big Number Arithmetic marcel hendrix <mhx@iae.nl> - 2026-09-04 07:29 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-04 07:45 -0500
Re: Range Reduction Using Big Number Arithmetic marcel hendrix <mhx@iae.nl> - 2026-09-04 15:29 +0200
Re: Range Reduction Using Big Number Arithmetic albert@spenarnc.xs4all.nl - 2026-09-05 12:27 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-05 08:39 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-09 07:37 -0500
Re: Range Reduction Using Big Number Arithmetic peter <peter.noreply@tin.it> - 2026-09-09 18:49 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-09 15:06 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-10 19:03 -0500
Re: Range Reduction Using Big Number Arithmetic peter <peter.noreply@tin.it> - 2026-09-11 14:56 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-11 09:17 -0500
Re: Range Reduction Using Big Number Arithmetic peter <peter.noreply@tin.it> - 2026-09-11 17:04 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-11 10:46 -0500
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-11 13:24 -0500
Re: Range Reduction Using Big Number Arithmetic peter <peter.noreply@tin.it> - 2026-09-11 23:21 +0200
Re: Range Reduction Using Big Number Arithmetic peter <peter.noreply@tin.it> - 2026-09-12 00:42 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-11 18:33 -0500
Re: Range Reduction Using Big Number Arithmetic peter <peter.noreply@tin.it> - 2026-09-12 11:04 +0200
Re: Range Reduction Using Big Number Arithmetic Krishna Myneni <krishna.myneni@ccreweb.org> - 2026-09-12 10:33 -0500
csiph-web