Changeset 95ce773 in sasmodels for sasmodels/models/lib/j0_cephes.c
- Timestamp:
- Mar 18, 2016 12:45:38 PM (8 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 9f7a852
- Parents:
- a629d8e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/lib/j0_cephes.c
r094e320 r95ce773 53 53 * except YP, YQ which are designed for absolute error. */ 54 54 55 double j0( double ); 56 double j0(double x) { 55 double J0(double x) { 57 56 58 57 //Cephes single precission … … 60 59 double w, z, p, q, xn; 61 60 62 const double TWOOPI = 6.36619772367581343075535E-1;61 //const double TWOOPI = 6.36619772367581343075535E-1; 63 62 const double SQ2OPI = 7.9788456080286535587989E-1; 64 63 const double PIO4 = 7.85398163397448309616E-1; … … 67 66 const double DR2 = 3.04712623436620863991E1; 68 67 69 const double PP[8] = {70 7.96936729297347051624E-4,71 8.28352392107440799803E-2,72 1.23953371646414299388E0,73 5.44725003058768775090E0,74 8.74716500199817011941E0,75 5.30324038235394892183E0,76 9.99999999999999997821E-1,77 0.078 };79 80 const double PQ[8] = {81 9.24408810558863637013E-4,82 8.56288474354474431428E-2,83 1.25352743901058953537E0,84 5.47097740330417105182E0,85 8.76190883237069594232E0,86 5.30605288235394617618E0,87 1.00000000000000000218E0,88 0.089 };90 91 const double QP[8] = {92 -1.13663838898469149931E-2,93 -1.28252718670509318512E0,94 -1.95539544257735972385E1,95 -9.32060152123768231369E1,96 -1.77681167980488050595E2,97 -1.47077505154951170175E2,98 -5.14105326766599330220E1,99 -6.05014350600728481186E0,100 };101 102 const double QQ[8] = {103 /* 1.00000000000000000000E0,*/104 6.43178256118178023184E1,105 8.56430025976980587198E2,106 3.88240183605401609683E3,107 7.24046774195652478189E3,108 5.93072701187316984827E3,109 2.06209331660327847417E3,110 2.42005740240291393179E2,111 };112 113 const double YP[8] = {114 1.55924367855235737965E4,115 -1.46639295903971606143E7,116 5.43526477051876500413E9,117 -9.82136065717911466409E11,118 8.75906394395366999549E13,119 -3.46628303384729719441E15,120 4.42733268572569800351E16,121 -1.84950800436986690637E16,122 };123 124 const double YQ[7] = {125 /* 1.00000000000000000000E0,*/126 1.04128353664259848412E3,127 6.26107330137134956842E5,128 2.68919633393814121987E8,129 8.64002487103935000337E10,130 2.02979612750105546709E13,131 3.17157752842975028269E15,132 2.50596256172653059228E17,133 };134 135 const double RP[8] = {136 -4.79443220978201773821E9,137 1.95617491946556577543E12,138 -2.49248344360967716204E14,139 9.70862251047306323952E15,140 0.0,141 0.0,142 0.0,143 0.0144 };145 146 const double RQ[8] = {147 /* 1.00000000000000000000E0,*/148 4.99563147152651017219E2,149 1.73785401676374683123E5,150 4.84409658339962045305E7,151 1.11855537045356834862E10,152 2.11277520115489217587E12,153 3.10518229857422583814E14,154 3.18121955943204943306E16,155 1.71086294081043136091E18,156 };157 68 158 69 if( x < 0 ) … … 165 76 166 77 p = (z - DR1) * (z - DR2); 167 p = p * polevl( z, RP , 3)/p1evl( z, RQ, 8 );78 p = p * polevl( z, RPJ0, 3)/p1evl( z, RQJ0, 8 ); 168 79 return( p ); 169 80 } … … 171 82 w = 5.0/x; 172 83 q = 25.0/(x*x); 173 p = polevl( q, PP , 6)/polevl( q, PQ, 6 );174 q = polevl( q, QP , 7)/p1evl( q, QQ, 7 );84 p = polevl( q, PPJ0, 6)/polevl( q, PQJ0, 6 ); 85 q = polevl( q, QPJ0, 7)/p1evl( q, QQJ0, 7 ); 175 86 xn = x - PIO4; 176 87 … … 184 95 double xx, w, z, p, q, xn; 185 96 186 const double YZ1 = 0.43221455686510834878;187 const double YZ2 = 22.401876406482861405;188 const double YZ3 = 64.130620282338755553;97 //const double YZ1 = 0.43221455686510834878; 98 //const double YZ2 = 22.401876406482861405; 99 //const double YZ3 = 64.130620282338755553; 189 100 const double DR1 = 5.78318596294678452118; 190 101 const double PIO4F = 0.7853981633974483096; 191 192 double MO[8] = {193 -6.838999669318810E-002,194 1.864949361379502E-001,195 -2.145007480346739E-001,196 1.197549369473540E-001,197 -3.560281861530129E-003,198 -4.969382655296620E-002,199 -3.355424622293709E-006,200 7.978845717621440E-001201 };202 203 double PH[8] = {204 3.242077816988247E+001,205 -3.630592630518434E+001,206 1.756221482109099E+001,207 -4.974978466280903E+000,208 1.001973420681837E+000,209 -1.939906941791308E-001,210 6.490598792654666E-002,211 -1.249992184872738E-001212 };213 214 double YP[8] = {215 9.454583683980369E-008,216 -9.413212653797057E-006,217 5.344486707214273E-004,218 -1.584289289821316E-002,219 1.707584643733568E-001,220 0.0,221 0.0,222 0.0223 };224 225 double JP[8] = {226 -6.068350350393235E-008,227 6.388945720783375E-006,228 -3.969646342510940E-004,229 1.332913422519003E-002,230 -1.729150680240724E-001,231 0.0,232 0.0,233 0.0234 };235 102 236 103 if( x < 0 ) … … 244 111 return( 1.0 - 0.25*z ); 245 112 246 p = (z-DR1) * polevl( z, JP , 4);113 p = (z-DR1) * polevl( z, JPJ0, 4); 247 114 return( p ); 248 115 } … … 251 118 w = sqrt(q); 252 119 253 p = w * polevl( q, MO , 7);120 p = w * polevl( q, MOJ0, 7); 254 121 w = q*q; 255 xn = q * polevl( w, PH , 7) - PIO4F;122 xn = q * polevl( w, PHJ0, 7) - PIO4F; 256 123 p = p * cos(xn + xx); 257 124 return(p);
Note: See TracChangeset
for help on using the changeset viewer.