2 * IBM Accurate Mathematical Library
3 * written by International Business Machines Corp.
4 * Copyright (C) 2001 Free Software Foundation
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 /**********************************************************************/
21 /* MODULE_NAME: doasin.c */
23 /* FUNCTION: doasin */
25 /* FILES NEEDED:endian.h mydefs.h dla.h doasin.h */
28 /* Compute arcsin(x,dx,v) of double-length number (x+dx) the result */
29 /* stored in v where v= v[0]+v[1] =arcsin(x+dx) */
30 /**********************************************************************/
35 #include "math_private.h"
37 /********************************************************************/
38 /* Compute arcsin(x,dx,v) of double-length number (x+dx) the result */
39 /* stored in v where v= v[0]+v[1] =arcsin(x+dx) */
40 /********************************************************************/
41 void __doasin(double x
, double dx
, double v
[]) {
46 d5
= 0.22372159090911789889975459505194491E-01,
47 d6
= 0.17352764422456822913014975683014622E-01,
48 d7
= 0.13964843843786693521653681033981614E-01,
49 d8
= 0.11551791438485242609036067259086589E-01,
50 d9
= 0.97622386568166960207425666787248914E-02,
51 d10
= 0.83638737193775788576092749009744976E-02,
52 d11
= 0.79470250400727425881446981833568758E-02;
54 double xx
,p
,pp
,u
,uu
,r
,s
;
55 double hx
,tx
,hy
,ty
,tp
,tq
,tc
,tcc
;
58 /* Taylor series for arcsin for Double-Length numbers */
60 p
= ((((((d11
*xx
+d10
)*xx
+d9
)*xx
+d8
)*xx
+d7
)*xx
+d6
)*xx
+d5
)*xx
;
63 MUL2(x
,dx
,x
,dx
,u
,uu
,tp
,hx
,tx
,hy
,ty
,tq
,tc
,tcc
);
64 ADD2(p
,pp
,c4
.x
,cc4
.x
,p
,pp
,r
,s
);
65 MUL2(p
,pp
,u
,uu
,p
,pp
,tp
,hx
,tx
,hy
,ty
,tq
,tc
,tcc
);
66 ADD2(p
,pp
,c3
.x
,cc3
.x
,p
,pp
,r
,s
);
67 MUL2(p
,pp
,u
,uu
,p
,pp
,tp
,hx
,tx
,hy
,ty
,tq
,tc
,tcc
);
68 ADD2(p
,pp
,c2
.x
,cc2
.x
,p
,pp
,r
,s
);
69 MUL2(p
,pp
,u
,uu
,p
,pp
,tp
,hx
,tx
,hy
,ty
,tq
,tc
,tcc
);
70 ADD2(p
,pp
,c1
.x
,cc1
.x
,p
,pp
,r
,s
);
71 MUL2(p
,pp
,u
,uu
,p
,pp
,tp
,hx
,tx
,hy
,ty
,tq
,tc
,tcc
);
72 MUL2(p
,pp
,x
,dx
,p
,pp
,tp
,hx
,tx
,hy
,ty
,tq
,tc
,tcc
);
73 ADD2(p
,pp
,x
,dx
,p
,pp
,r
,s
);
75 v
[1]=pp
; /* arcsin(x+dx)=v[0]+v[1] */