jbarnette-johnson 1.0.0.200806240111 → 1.0.0.200807291507

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. data/MANIFEST +1 -0
  2. data/Rakefile +3 -10
  3. data/bin/johnson +2 -1
  4. data/ext/spidermonkey/context.c +3 -4
  5. data/ext/spidermonkey/context.h +1 -1
  6. data/ext/spidermonkey/conversions.c +39 -33
  7. data/ext/spidermonkey/debugger.c +5 -5
  8. data/ext/spidermonkey/immutable_node.c.erb +11 -11
  9. data/ext/spidermonkey/jroot.h +4 -4
  10. data/ext/spidermonkey/js_land_proxy.c +9 -8
  11. data/ext/spidermonkey/ruby_land_proxy.c +5 -4
  12. data/ext/spidermonkey/runtime.c +1 -1
  13. data/johnson.gemspec +36 -0
  14. data/lib/hoe.rb +0 -7
  15. data/lib/johnson/cli/options.rb +10 -4
  16. data/lib/johnson/spidermonkey/runtime.rb +2 -2
  17. data/lib/johnson/version.rb +4 -2
  18. data/lib/johnson.rb +1 -0
  19. data/test/johnson/runtime_test.rb +11 -0
  20. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +6 -0
  21. data/vendor/spidermonkey/.cvsignore +9 -0
  22. data/vendor/spidermonkey/Makefile.in +462 -0
  23. data/vendor/spidermonkey/Makefile.ref +364 -0
  24. data/vendor/spidermonkey/README.html +820 -0
  25. data/vendor/spidermonkey/SpiderMonkey.rsp +12 -0
  26. data/vendor/spidermonkey/Y.js +19 -0
  27. data/vendor/spidermonkey/build.mk +43 -0
  28. data/vendor/spidermonkey/config/AIX4.1.mk +65 -0
  29. data/vendor/spidermonkey/config/AIX4.2.mk +64 -0
  30. data/vendor/spidermonkey/config/AIX4.3.mk +65 -0
  31. data/vendor/spidermonkey/config/Darwin.mk +83 -0
  32. data/vendor/spidermonkey/config/Darwin1.3.mk +81 -0
  33. data/vendor/spidermonkey/config/Darwin1.4.mk +41 -0
  34. data/vendor/spidermonkey/config/Darwin5.2.mk +81 -0
  35. data/vendor/spidermonkey/config/Darwin5.3.mk +81 -0
  36. data/vendor/spidermonkey/config/HP-UXB.10.10.mk +77 -0
  37. data/vendor/spidermonkey/config/HP-UXB.10.20.mk +77 -0
  38. data/vendor/spidermonkey/config/HP-UXB.11.00.mk +80 -0
  39. data/vendor/spidermonkey/config/IRIX.mk +87 -0
  40. data/vendor/spidermonkey/config/IRIX5.3.mk +44 -0
  41. data/vendor/spidermonkey/config/IRIX6.1.mk +44 -0
  42. data/vendor/spidermonkey/config/IRIX6.2.mk +44 -0
  43. data/vendor/spidermonkey/config/IRIX6.3.mk +44 -0
  44. data/vendor/spidermonkey/config/IRIX6.5.mk +44 -0
  45. data/vendor/spidermonkey/config/Linux_All.mk +103 -0
  46. data/vendor/spidermonkey/config/Mac_OS10.0.mk +82 -0
  47. data/vendor/spidermonkey/config/OSF1V4.0.mk +72 -0
  48. data/vendor/spidermonkey/config/OSF1V5.0.mk +69 -0
  49. data/vendor/spidermonkey/config/SunOS4.1.4.mk +101 -0
  50. data/vendor/spidermonkey/config/SunOS5.10.mk +50 -0
  51. data/vendor/spidermonkey/config/SunOS5.3.mk +91 -0
  52. data/vendor/spidermonkey/config/SunOS5.4.mk +92 -0
  53. data/vendor/spidermonkey/config/SunOS5.5.1.mk +44 -0
  54. data/vendor/spidermonkey/config/SunOS5.5.mk +87 -0
  55. data/vendor/spidermonkey/config/SunOS5.6.mk +89 -0
  56. data/vendor/spidermonkey/config/SunOS5.7.mk +44 -0
  57. data/vendor/spidermonkey/config/SunOS5.8.mk +44 -0
  58. data/vendor/spidermonkey/config/SunOS5.9.mk +44 -0
  59. data/vendor/spidermonkey/config/WINNT4.0.mk +117 -0
  60. data/vendor/spidermonkey/config/WINNT5.0.mk +117 -0
  61. data/vendor/spidermonkey/config/WINNT5.1.mk +117 -0
  62. data/vendor/spidermonkey/config/WINNT5.2.mk +117 -0
  63. data/vendor/spidermonkey/config/WINNT6.0.mk +117 -0
  64. data/vendor/spidermonkey/config/dgux.mk +64 -0
  65. data/vendor/spidermonkey/config.mk +192 -0
  66. data/vendor/spidermonkey/editline/Makefile.ref +144 -0
  67. data/vendor/spidermonkey/editline/README +83 -0
  68. data/vendor/spidermonkey/editline/editline.3 +175 -0
  69. data/vendor/spidermonkey/editline/editline.c +1369 -0
  70. data/vendor/spidermonkey/editline/editline.h +135 -0
  71. data/vendor/spidermonkey/editline/sysunix.c +182 -0
  72. data/vendor/spidermonkey/editline/unix.h +82 -0
  73. data/vendor/spidermonkey/fdlibm/.cvsignore +7 -0
  74. data/vendor/spidermonkey/fdlibm/Makefile.in +127 -0
  75. data/vendor/spidermonkey/fdlibm/Makefile.ref +192 -0
  76. data/vendor/spidermonkey/fdlibm/e_acos.c +147 -0
  77. data/vendor/spidermonkey/fdlibm/e_acosh.c +105 -0
  78. data/vendor/spidermonkey/fdlibm/e_asin.c +156 -0
  79. data/vendor/spidermonkey/fdlibm/e_atan2.c +165 -0
  80. data/vendor/spidermonkey/fdlibm/e_atanh.c +110 -0
  81. data/vendor/spidermonkey/fdlibm/e_cosh.c +133 -0
  82. data/vendor/spidermonkey/fdlibm/e_exp.c +202 -0
  83. data/vendor/spidermonkey/fdlibm/e_fmod.c +184 -0
  84. data/vendor/spidermonkey/fdlibm/e_gamma.c +71 -0
  85. data/vendor/spidermonkey/fdlibm/e_gamma_r.c +70 -0
  86. data/vendor/spidermonkey/fdlibm/e_hypot.c +173 -0
  87. data/vendor/spidermonkey/fdlibm/e_j0.c +524 -0
  88. data/vendor/spidermonkey/fdlibm/e_j1.c +523 -0
  89. data/vendor/spidermonkey/fdlibm/e_jn.c +315 -0
  90. data/vendor/spidermonkey/fdlibm/e_lgamma.c +71 -0
  91. data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +347 -0
  92. data/vendor/spidermonkey/fdlibm/e_log.c +184 -0
  93. data/vendor/spidermonkey/fdlibm/e_log10.c +134 -0
  94. data/vendor/spidermonkey/fdlibm/e_pow.c +386 -0
  95. data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +222 -0
  96. data/vendor/spidermonkey/fdlibm/e_remainder.c +120 -0
  97. data/vendor/spidermonkey/fdlibm/e_scalb.c +89 -0
  98. data/vendor/spidermonkey/fdlibm/e_sinh.c +122 -0
  99. data/vendor/spidermonkey/fdlibm/e_sqrt.c +497 -0
  100. data/vendor/spidermonkey/fdlibm/fdlibm.h +273 -0
  101. data/vendor/spidermonkey/fdlibm/fdlibm.mak +1453 -0
  102. data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
  103. data/vendor/spidermonkey/fdlibm/k_cos.c +135 -0
  104. data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +354 -0
  105. data/vendor/spidermonkey/fdlibm/k_sin.c +114 -0
  106. data/vendor/spidermonkey/fdlibm/k_standard.c +785 -0
  107. data/vendor/spidermonkey/fdlibm/k_tan.c +170 -0
  108. data/vendor/spidermonkey/fdlibm/s_asinh.c +101 -0
  109. data/vendor/spidermonkey/fdlibm/s_atan.c +175 -0
  110. data/vendor/spidermonkey/fdlibm/s_cbrt.c +133 -0
  111. data/vendor/spidermonkey/fdlibm/s_ceil.c +120 -0
  112. data/vendor/spidermonkey/fdlibm/s_copysign.c +72 -0
  113. data/vendor/spidermonkey/fdlibm/s_cos.c +118 -0
  114. data/vendor/spidermonkey/fdlibm/s_erf.c +356 -0
  115. data/vendor/spidermonkey/fdlibm/s_expm1.c +267 -0
  116. data/vendor/spidermonkey/fdlibm/s_fabs.c +70 -0
  117. data/vendor/spidermonkey/fdlibm/s_finite.c +71 -0
  118. data/vendor/spidermonkey/fdlibm/s_floor.c +121 -0
  119. data/vendor/spidermonkey/fdlibm/s_frexp.c +99 -0
  120. data/vendor/spidermonkey/fdlibm/s_ilogb.c +85 -0
  121. data/vendor/spidermonkey/fdlibm/s_isnan.c +74 -0
  122. data/vendor/spidermonkey/fdlibm/s_ldexp.c +66 -0
  123. data/vendor/spidermonkey/fdlibm/s_lib_version.c +73 -0
  124. data/vendor/spidermonkey/fdlibm/s_log1p.c +211 -0
  125. data/vendor/spidermonkey/fdlibm/s_logb.c +79 -0
  126. data/vendor/spidermonkey/fdlibm/s_matherr.c +64 -0
  127. data/vendor/spidermonkey/fdlibm/s_modf.c +132 -0
  128. data/vendor/spidermonkey/fdlibm/s_nextafter.c +124 -0
  129. data/vendor/spidermonkey/fdlibm/s_rint.c +131 -0
  130. data/vendor/spidermonkey/fdlibm/s_scalbn.c +107 -0
  131. data/vendor/spidermonkey/fdlibm/s_signgam.c +40 -0
  132. data/vendor/spidermonkey/fdlibm/s_significand.c +68 -0
  133. data/vendor/spidermonkey/fdlibm/s_sin.c +118 -0
  134. data/vendor/spidermonkey/fdlibm/s_tan.c +112 -0
  135. data/vendor/spidermonkey/fdlibm/s_tanh.c +122 -0
  136. data/vendor/spidermonkey/fdlibm/w_acos.c +78 -0
  137. data/vendor/spidermonkey/fdlibm/w_acosh.c +78 -0
  138. data/vendor/spidermonkey/fdlibm/w_asin.c +80 -0
  139. data/vendor/spidermonkey/fdlibm/w_atan2.c +79 -0
  140. data/vendor/spidermonkey/fdlibm/w_atanh.c +81 -0
  141. data/vendor/spidermonkey/fdlibm/w_cosh.c +77 -0
  142. data/vendor/spidermonkey/fdlibm/w_exp.c +88 -0
  143. data/vendor/spidermonkey/fdlibm/w_fmod.c +78 -0
  144. data/vendor/spidermonkey/fdlibm/w_gamma.c +85 -0
  145. data/vendor/spidermonkey/fdlibm/w_gamma_r.c +81 -0
  146. data/vendor/spidermonkey/fdlibm/w_hypot.c +78 -0
  147. data/vendor/spidermonkey/fdlibm/w_j0.c +105 -0
  148. data/vendor/spidermonkey/fdlibm/w_j1.c +106 -0
  149. data/vendor/spidermonkey/fdlibm/w_jn.c +128 -0
  150. data/vendor/spidermonkey/fdlibm/w_lgamma.c +85 -0
  151. data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +81 -0
  152. data/vendor/spidermonkey/fdlibm/w_log.c +78 -0
  153. data/vendor/spidermonkey/fdlibm/w_log10.c +81 -0
  154. data/vendor/spidermonkey/fdlibm/w_pow.c +99 -0
  155. data/vendor/spidermonkey/fdlibm/w_remainder.c +77 -0
  156. data/vendor/spidermonkey/fdlibm/w_scalb.c +95 -0
  157. data/vendor/spidermonkey/fdlibm/w_sinh.c +77 -0
  158. data/vendor/spidermonkey/fdlibm/w_sqrt.c +77 -0
  159. data/vendor/spidermonkey/javascript-trace.d +73 -0
  160. data/vendor/spidermonkey/js.c +3951 -0
  161. data/vendor/spidermonkey/js.mak +4438 -0
  162. data/vendor/spidermonkey/js.mdp +0 -0
  163. data/vendor/spidermonkey/js.msg +307 -0
  164. data/vendor/spidermonkey/js.pkg +2 -0
  165. data/vendor/spidermonkey/js3240.rc +79 -0
  166. data/vendor/spidermonkey/jsOS240.def +654 -0
  167. data/vendor/spidermonkey/jsapi.c +5836 -0
  168. data/vendor/spidermonkey/jsapi.h +2624 -0
  169. data/vendor/spidermonkey/jsarena.c +450 -0
  170. data/vendor/spidermonkey/jsarena.h +318 -0
  171. data/vendor/spidermonkey/jsarray.c +2988 -0
  172. data/vendor/spidermonkey/jsarray.h +124 -0
  173. data/vendor/spidermonkey/jsatom.c +1045 -0
  174. data/vendor/spidermonkey/jsatom.h +442 -0
  175. data/vendor/spidermonkey/jsbit.h +253 -0
  176. data/vendor/spidermonkey/jsbool.c +176 -0
  177. data/vendor/spidermonkey/jsbool.h +73 -0
  178. data/vendor/spidermonkey/jsclist.h +139 -0
  179. data/vendor/spidermonkey/jscntxt.c +1348 -0
  180. data/vendor/spidermonkey/jscntxt.h +1120 -0
  181. data/vendor/spidermonkey/jscompat.h +57 -0
  182. data/vendor/spidermonkey/jsconfig.h +248 -0
  183. data/vendor/spidermonkey/jsconfig.mk +181 -0
  184. data/vendor/spidermonkey/jscpucfg.c +383 -0
  185. data/vendor/spidermonkey/jscpucfg.h +212 -0
  186. data/vendor/spidermonkey/jsdate.c +2398 -0
  187. data/vendor/spidermonkey/jsdate.h +124 -0
  188. data/vendor/spidermonkey/jsdbgapi.c +1799 -0
  189. data/vendor/spidermonkey/jsdbgapi.h +464 -0
  190. data/vendor/spidermonkey/jsdhash.c +868 -0
  191. data/vendor/spidermonkey/jsdhash.h +592 -0
  192. data/vendor/spidermonkey/jsdtoa.c +3167 -0
  193. data/vendor/spidermonkey/jsdtoa.h +130 -0
  194. data/vendor/spidermonkey/jsdtracef.c +317 -0
  195. data/vendor/spidermonkey/jsdtracef.h +77 -0
  196. data/vendor/spidermonkey/jsemit.c +6909 -0
  197. data/vendor/spidermonkey/jsemit.h +741 -0
  198. data/vendor/spidermonkey/jsexn.c +1371 -0
  199. data/vendor/spidermonkey/jsexn.h +96 -0
  200. data/vendor/spidermonkey/jsfile.c +2736 -0
  201. data/vendor/spidermonkey/jsfile.h +56 -0
  202. data/vendor/spidermonkey/jsfile.msg +90 -0
  203. data/vendor/spidermonkey/jsfun.c +2634 -0
  204. data/vendor/spidermonkey/jsfun.h +254 -0
  205. data/vendor/spidermonkey/jsgc.c +3554 -0
  206. data/vendor/spidermonkey/jsgc.h +403 -0
  207. data/vendor/spidermonkey/jshash.c +476 -0
  208. data/vendor/spidermonkey/jshash.h +151 -0
  209. data/vendor/spidermonkey/jsify.pl +485 -0
  210. data/vendor/spidermonkey/jsinterp.c +6981 -0
  211. data/vendor/spidermonkey/jsinterp.h +521 -0
  212. data/vendor/spidermonkey/jsinvoke.c +43 -0
  213. data/vendor/spidermonkey/jsiter.c +1067 -0
  214. data/vendor/spidermonkey/jsiter.h +122 -0
  215. data/vendor/spidermonkey/jskeyword.tbl +124 -0
  216. data/vendor/spidermonkey/jskwgen.c +460 -0
  217. data/vendor/spidermonkey/jslibmath.h +266 -0
  218. data/vendor/spidermonkey/jslock.c +1309 -0
  219. data/vendor/spidermonkey/jslock.h +313 -0
  220. data/vendor/spidermonkey/jslocko.asm +60 -0
  221. data/vendor/spidermonkey/jslog2.c +94 -0
  222. data/vendor/spidermonkey/jslong.c +264 -0
  223. data/vendor/spidermonkey/jslong.h +412 -0
  224. data/vendor/spidermonkey/jsmath.c +568 -0
  225. data/vendor/spidermonkey/jsmath.h +57 -0
  226. data/vendor/spidermonkey/jsnum.c +1228 -0
  227. data/vendor/spidermonkey/jsnum.h +283 -0
  228. data/vendor/spidermonkey/jsobj.c +5266 -0
  229. data/vendor/spidermonkey/jsobj.h +709 -0
  230. data/vendor/spidermonkey/jsopcode.c +5245 -0
  231. data/vendor/spidermonkey/jsopcode.h +394 -0
  232. data/vendor/spidermonkey/jsopcode.tbl +523 -0
  233. data/vendor/spidermonkey/jsotypes.h +202 -0
  234. data/vendor/spidermonkey/jsparse.c +6680 -0
  235. data/vendor/spidermonkey/jsparse.h +511 -0
  236. data/vendor/spidermonkey/jsprf.c +1262 -0
  237. data/vendor/spidermonkey/jsprf.h +150 -0
  238. data/vendor/spidermonkey/jsproto.tbl +128 -0
  239. data/vendor/spidermonkey/jsprvtd.h +267 -0
  240. data/vendor/spidermonkey/jspubtd.h +744 -0
  241. data/vendor/spidermonkey/jsregexp.c +4352 -0
  242. data/vendor/spidermonkey/jsregexp.h +183 -0
  243. data/vendor/spidermonkey/jsreops.tbl +145 -0
  244. data/vendor/spidermonkey/jsscan.c +2003 -0
  245. data/vendor/spidermonkey/jsscan.h +387 -0
  246. data/vendor/spidermonkey/jsscope.c +1948 -0
  247. data/vendor/spidermonkey/jsscope.h +418 -0
  248. data/vendor/spidermonkey/jsscript.c +1832 -0
  249. data/vendor/spidermonkey/jsscript.h +287 -0
  250. data/vendor/spidermonkey/jsshell.msg +50 -0
  251. data/vendor/spidermonkey/jsstddef.h +83 -0
  252. data/vendor/spidermonkey/jsstr.c +5004 -0
  253. data/vendor/spidermonkey/jsstr.h +641 -0
  254. data/vendor/spidermonkey/jstypes.h +475 -0
  255. data/vendor/spidermonkey/jsutil.c +345 -0
  256. data/vendor/spidermonkey/jsutil.h +157 -0
  257. data/vendor/spidermonkey/jsxdrapi.c +800 -0
  258. data/vendor/spidermonkey/jsxdrapi.h +218 -0
  259. data/vendor/spidermonkey/jsxml.c +8471 -0
  260. data/vendor/spidermonkey/jsxml.h +349 -0
  261. data/vendor/spidermonkey/lock_SunOS.s +119 -0
  262. data/vendor/spidermonkey/perfect.js +39 -0
  263. data/vendor/spidermonkey/plify_jsdhash.sed +36 -0
  264. data/vendor/spidermonkey/prmjtime.c +846 -0
  265. data/vendor/spidermonkey/prmjtime.h +103 -0
  266. data/vendor/spidermonkey/resource.h +15 -0
  267. data/vendor/spidermonkey/rules.mk +197 -0
  268. data/vendor/spidermonkey/win32.order +384 -0
  269. metadata +4 -3
@@ -0,0 +1,524 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Sun Microsystems, Inc.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ *
26
+ * Alternatively, the contents of this file may be used under the terms of
27
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
28
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
+ * in which case the provisions of the GPL or the LGPL are applicable instead
30
+ * of those above. If you wish to allow use of your version of this file only
31
+ * under the terms of either the GPL or the LGPL, and not to allow others to
32
+ * use your version of this file under the terms of the MPL, indicate your
33
+ * decision by deleting the provisions above and replace them with the notice
34
+ * and other provisions required by the GPL or the LGPL. If you do not delete
35
+ * the provisions above, a recipient may use your version of this file under
36
+ * the terms of any one of the MPL, the GPL or the LGPL.
37
+ *
38
+ * ***** END LICENSE BLOCK ***** */
39
+
40
+ /* @(#)e_j0.c 1.3 95/01/18 */
41
+ /*
42
+ * ====================================================
43
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
44
+ *
45
+ * Developed at SunSoft, a Sun Microsystems, Inc. business.
46
+ * Permission to use, copy, modify, and distribute this
47
+ * software is freely granted, provided that this notice
48
+ * is preserved.
49
+ * ====================================================
50
+ */
51
+
52
+ /* __ieee754_j0(x), __ieee754_y0(x)
53
+ * Bessel function of the first and second kinds of order zero.
54
+ * Method -- j0(x):
55
+ * 1. For tiny x, we use j0(x) = 1 - x^2/4 + x^4/64 - ...
56
+ * 2. Reduce x to |x| since j0(x)=j0(-x), and
57
+ * for x in (0,2)
58
+ * j0(x) = 1-z/4+ z^2*R0/S0, where z = x*x;
59
+ * (precision: |j0-1+z/4-z^2R0/S0 |<2**-63.67 )
60
+ * for x in (2,inf)
61
+ * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0))
62
+ * where x0 = x-pi/4. It is better to compute sin(x0),cos(x0)
63
+ * as follow:
64
+ * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
65
+ * = 1/sqrt(2) * (cos(x) + sin(x))
66
+ * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4)
67
+ * = 1/sqrt(2) * (sin(x) - cos(x))
68
+ * (To avoid cancellation, use
69
+ * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
70
+ * to compute the worse one.)
71
+ *
72
+ * 3 Special cases
73
+ * j0(nan)= nan
74
+ * j0(0) = 1
75
+ * j0(inf) = 0
76
+ *
77
+ * Method -- y0(x):
78
+ * 1. For x<2.
79
+ * Since
80
+ * y0(x) = 2/pi*(j0(x)*(ln(x/2)+Euler) + x^2/4 - ...)
81
+ * therefore y0(x)-2/pi*j0(x)*ln(x) is an even function.
82
+ * We use the following function to approximate y0,
83
+ * y0(x) = U(z)/V(z) + (2/pi)*(j0(x)*ln(x)), z= x^2
84
+ * where
85
+ * U(z) = u00 + u01*z + ... + u06*z^6
86
+ * V(z) = 1 + v01*z + ... + v04*z^4
87
+ * with absolute approximation error bounded by 2**-72.
88
+ * Note: For tiny x, U/V = u0 and j0(x)~1, hence
89
+ * y0(tiny) = u0 + (2/pi)*ln(tiny), (choose tiny<2**-27)
90
+ * 2. For x>=2.
91
+ * y0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)+q0(x)*sin(x0))
92
+ * where x0 = x-pi/4. It is better to compute sin(x0),cos(x0)
93
+ * by the method mentioned above.
94
+ * 3. Special cases: y0(0)=-inf, y0(x<0)=NaN, y0(inf)=0.
95
+ */
96
+
97
+ #include "fdlibm.h"
98
+
99
+ #ifdef __STDC__
100
+ static double pzero(double), qzero(double);
101
+ #else
102
+ static double pzero(), qzero();
103
+ #endif
104
+
105
+ #ifdef __STDC__
106
+ static const double
107
+ #else
108
+ static double
109
+ #endif
110
+ really_big = 1e300,
111
+ one = 1.0,
112
+ invsqrtpi= 5.64189583547756279280e-01, /* 0x3FE20DD7, 0x50429B6D */
113
+ tpi = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */
114
+ /* R0/S0 on [0, 2.00] */
115
+ R02 = 1.56249999999999947958e-02, /* 0x3F8FFFFF, 0xFFFFFFFD */
116
+ R03 = -1.89979294238854721751e-04, /* 0xBF28E6A5, 0xB61AC6E9 */
117
+ R04 = 1.82954049532700665670e-06, /* 0x3EBEB1D1, 0x0C503919 */
118
+ R05 = -4.61832688532103189199e-09, /* 0xBE33D5E7, 0x73D63FCE */
119
+ S01 = 1.56191029464890010492e-02, /* 0x3F8FFCE8, 0x82C8C2A4 */
120
+ S02 = 1.16926784663337450260e-04, /* 0x3F1EA6D2, 0xDD57DBF4 */
121
+ S03 = 5.13546550207318111446e-07, /* 0x3EA13B54, 0xCE84D5A9 */
122
+ S04 = 1.16614003333790000205e-09; /* 0x3E1408BC, 0xF4745D8F */
123
+
124
+ static double zero = 0.0;
125
+
126
+ #ifdef __STDC__
127
+ double __ieee754_j0(double x)
128
+ #else
129
+ double __ieee754_j0(x)
130
+ double x;
131
+ #endif
132
+ {
133
+ fd_twoints un;
134
+ double z, s,c,ss,cc,r,u,v;
135
+ int hx,ix;
136
+
137
+ un.d = x;
138
+ hx = __HI(un);
139
+ ix = hx&0x7fffffff;
140
+ if(ix>=0x7ff00000) return one/(x*x);
141
+ x = fd_fabs(x);
142
+ if(ix >= 0x40000000) { /* |x| >= 2.0 */
143
+ s = fd_sin(x);
144
+ c = fd_cos(x);
145
+ ss = s-c;
146
+ cc = s+c;
147
+ if(ix<0x7fe00000) { /* make sure x+x not overflow */
148
+ z = -fd_cos(x+x);
149
+ if ((s*c)<zero) cc = z/ss;
150
+ else ss = z/cc;
151
+ }
152
+ /*
153
+ * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)
154
+ * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)
155
+ */
156
+ if(ix>0x48000000) z = (invsqrtpi*cc)/fd_sqrt(x);
157
+ else {
158
+ u = pzero(x); v = qzero(x);
159
+ z = invsqrtpi*(u*cc-v*ss)/fd_sqrt(x);
160
+ }
161
+ return z;
162
+ }
163
+ if(ix<0x3f200000) { /* |x| < 2**-13 */
164
+ if(really_big+x>one) { /* raise inexact if x != 0 */
165
+ if(ix<0x3e400000) return one; /* |x|<2**-27 */
166
+ else return one - 0.25*x*x;
167
+ }
168
+ }
169
+ z = x*x;
170
+ r = z*(R02+z*(R03+z*(R04+z*R05)));
171
+ s = one+z*(S01+z*(S02+z*(S03+z*S04)));
172
+ if(ix < 0x3FF00000) { /* |x| < 1.00 */
173
+ return one + z*(-0.25+(r/s));
174
+ } else {
175
+ u = 0.5*x;
176
+ return((one+u)*(one-u)+z*(r/s));
177
+ }
178
+ }
179
+
180
+ #ifdef __STDC__
181
+ static const double
182
+ #else
183
+ static double
184
+ #endif
185
+ u00 = -7.38042951086872317523e-02, /* 0xBFB2E4D6, 0x99CBD01F */
186
+ u01 = 1.76666452509181115538e-01, /* 0x3FC69D01, 0x9DE9E3FC */
187
+ u02 = -1.38185671945596898896e-02, /* 0xBF8C4CE8, 0xB16CFA97 */
188
+ u03 = 3.47453432093683650238e-04, /* 0x3F36C54D, 0x20B29B6B */
189
+ u04 = -3.81407053724364161125e-06, /* 0xBECFFEA7, 0x73D25CAD */
190
+ u05 = 1.95590137035022920206e-08, /* 0x3E550057, 0x3B4EABD4 */
191
+ u06 = -3.98205194132103398453e-11, /* 0xBDC5E43D, 0x693FB3C8 */
192
+ v01 = 1.27304834834123699328e-02, /* 0x3F8A1270, 0x91C9C71A */
193
+ v02 = 7.60068627350353253702e-05, /* 0x3F13ECBB, 0xF578C6C1 */
194
+ v03 = 2.59150851840457805467e-07, /* 0x3E91642D, 0x7FF202FD */
195
+ v04 = 4.41110311332675467403e-10; /* 0x3DFE5018, 0x3BD6D9EF */
196
+
197
+ #ifdef __STDC__
198
+ double __ieee754_y0(double x)
199
+ #else
200
+ double __ieee754_y0(x)
201
+ double x;
202
+ #endif
203
+ {
204
+ fd_twoints un;
205
+ double z, s,c,ss,cc,u,v;
206
+ int hx,ix,lx;
207
+
208
+ un.d = x;
209
+ hx = __HI(un);
210
+ ix = 0x7fffffff&hx;
211
+ lx = __LO(un);
212
+ /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0 */
213
+ if(ix>=0x7ff00000) return one/(x+x*x);
214
+ if((ix|lx)==0) return -one/zero;
215
+ if(hx<0) return zero/zero;
216
+ if(ix >= 0x40000000) { /* |x| >= 2.0 */
217
+ /* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0))
218
+ * where x0 = x-pi/4
219
+ * Better formula:
220
+ * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
221
+ * = 1/sqrt(2) * (sin(x) + cos(x))
222
+ * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
223
+ * = 1/sqrt(2) * (sin(x) - cos(x))
224
+ * To avoid cancellation, use
225
+ * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
226
+ * to compute the worse one.
227
+ */
228
+ s = fd_sin(x);
229
+ c = fd_cos(x);
230
+ ss = s-c;
231
+ cc = s+c;
232
+ /*
233
+ * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)
234
+ * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)
235
+ */
236
+ if(ix<0x7fe00000) { /* make sure x+x not overflow */
237
+ z = -fd_cos(x+x);
238
+ if ((s*c)<zero) cc = z/ss;
239
+ else ss = z/cc;
240
+ }
241
+ if(ix>0x48000000) z = (invsqrtpi*ss)/fd_sqrt(x);
242
+ else {
243
+ u = pzero(x); v = qzero(x);
244
+ z = invsqrtpi*(u*ss+v*cc)/fd_sqrt(x);
245
+ }
246
+ return z;
247
+ }
248
+ if(ix<=0x3e400000) { /* x < 2**-27 */
249
+ return(u00 + tpi*__ieee754_log(x));
250
+ }
251
+ z = x*x;
252
+ u = u00+z*(u01+z*(u02+z*(u03+z*(u04+z*(u05+z*u06)))));
253
+ v = one+z*(v01+z*(v02+z*(v03+z*v04)));
254
+ return(u/v + tpi*(__ieee754_j0(x)*__ieee754_log(x)));
255
+ }
256
+
257
+ /* The asymptotic expansions of pzero is
258
+ * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x.
259
+ * For x >= 2, We approximate pzero by
260
+ * pzero(x) = 1 + (R/S)
261
+ * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10
262
+ * S = 1 + pS0*s^2 + ... + pS4*s^10
263
+ * and
264
+ * | pzero(x)-1-R/S | <= 2 ** ( -60.26)
265
+ */
266
+ #ifdef __STDC__
267
+ static const double pR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */
268
+ #else
269
+ static double pR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */
270
+ #endif
271
+ 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
272
+ -7.03124999999900357484e-02, /* 0xBFB1FFFF, 0xFFFFFD32 */
273
+ -8.08167041275349795626e+00, /* 0xC02029D0, 0xB44FA779 */
274
+ -2.57063105679704847262e+02, /* 0xC0701102, 0x7B19E863 */
275
+ -2.48521641009428822144e+03, /* 0xC0A36A6E, 0xCD4DCAFC */
276
+ -5.25304380490729545272e+03, /* 0xC0B4850B, 0x36CC643D */
277
+ };
278
+ #ifdef __STDC__
279
+ static const double pS8[5] = {
280
+ #else
281
+ static double pS8[5] = {
282
+ #endif
283
+ 1.16534364619668181717e+02, /* 0x405D2233, 0x07A96751 */
284
+ 3.83374475364121826715e+03, /* 0x40ADF37D, 0x50596938 */
285
+ 4.05978572648472545552e+04, /* 0x40E3D2BB, 0x6EB6B05F */
286
+ 1.16752972564375915681e+05, /* 0x40FC810F, 0x8F9FA9BD */
287
+ 4.76277284146730962675e+04, /* 0x40E74177, 0x4F2C49DC */
288
+ };
289
+
290
+ #ifdef __STDC__
291
+ static const double pR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */
292
+ #else
293
+ static double pR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */
294
+ #endif
295
+ -1.14125464691894502584e-11, /* 0xBDA918B1, 0x47E495CC */
296
+ -7.03124940873599280078e-02, /* 0xBFB1FFFF, 0xE69AFBC6 */
297
+ -4.15961064470587782438e+00, /* 0xC010A370, 0xF90C6BBF */
298
+ -6.76747652265167261021e+01, /* 0xC050EB2F, 0x5A7D1783 */
299
+ -3.31231299649172967747e+02, /* 0xC074B3B3, 0x6742CC63 */
300
+ -3.46433388365604912451e+02, /* 0xC075A6EF, 0x28A38BD7 */
301
+ };
302
+ #ifdef __STDC__
303
+ static const double pS5[5] = {
304
+ #else
305
+ static double pS5[5] = {
306
+ #endif
307
+ 6.07539382692300335975e+01, /* 0x404E6081, 0x0C98C5DE */
308
+ 1.05125230595704579173e+03, /* 0x40906D02, 0x5C7E2864 */
309
+ 5.97897094333855784498e+03, /* 0x40B75AF8, 0x8FBE1D60 */
310
+ 9.62544514357774460223e+03, /* 0x40C2CCB8, 0xFA76FA38 */
311
+ 2.40605815922939109441e+03, /* 0x40A2CC1D, 0xC70BE864 */
312
+ };
313
+
314
+ #ifdef __STDC__
315
+ static const double pR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */
316
+ #else
317
+ static double pR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */
318
+ #endif
319
+ -2.54704601771951915620e-09, /* 0xBE25E103, 0x6FE1AA86 */
320
+ -7.03119616381481654654e-02, /* 0xBFB1FFF6, 0xF7C0E24B */
321
+ -2.40903221549529611423e+00, /* 0xC00345B2, 0xAEA48074 */
322
+ -2.19659774734883086467e+01, /* 0xC035F74A, 0x4CB94E14 */
323
+ -5.80791704701737572236e+01, /* 0xC04D0A22, 0x420A1A45 */
324
+ -3.14479470594888503854e+01, /* 0xC03F72AC, 0xA892D80F */
325
+ };
326
+ #ifdef __STDC__
327
+ static const double pS3[5] = {
328
+ #else
329
+ static double pS3[5] = {
330
+ #endif
331
+ 3.58560338055209726349e+01, /* 0x4041ED92, 0x84077DD3 */
332
+ 3.61513983050303863820e+02, /* 0x40769839, 0x464A7C0E */
333
+ 1.19360783792111533330e+03, /* 0x4092A66E, 0x6D1061D6 */
334
+ 1.12799679856907414432e+03, /* 0x40919FFC, 0xB8C39B7E */
335
+ 1.73580930813335754692e+02, /* 0x4065B296, 0xFC379081 */
336
+ };
337
+
338
+ #ifdef __STDC__
339
+ static const double pR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */
340
+ #else
341
+ static double pR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */
342
+ #endif
343
+ -8.87534333032526411254e-08, /* 0xBE77D316, 0xE927026D */
344
+ -7.03030995483624743247e-02, /* 0xBFB1FF62, 0x495E1E42 */
345
+ -1.45073846780952986357e+00, /* 0xBFF73639, 0x8A24A843 */
346
+ -7.63569613823527770791e+00, /* 0xC01E8AF3, 0xEDAFA7F3 */
347
+ -1.11931668860356747786e+01, /* 0xC02662E6, 0xC5246303 */
348
+ -3.23364579351335335033e+00, /* 0xC009DE81, 0xAF8FE70F */
349
+ };
350
+ #ifdef __STDC__
351
+ static const double pS2[5] = {
352
+ #else
353
+ static double pS2[5] = {
354
+ #endif
355
+ 2.22202997532088808441e+01, /* 0x40363865, 0x908B5959 */
356
+ 1.36206794218215208048e+02, /* 0x4061069E, 0x0EE8878F */
357
+ 2.70470278658083486789e+02, /* 0x4070E786, 0x42EA079B */
358
+ 1.53875394208320329881e+02, /* 0x40633C03, 0x3AB6FAFF */
359
+ 1.46576176948256193810e+01, /* 0x402D50B3, 0x44391809 */
360
+ };
361
+
362
+ #ifdef __STDC__
363
+ static double pzero(double x)
364
+ #else
365
+ static double pzero(x)
366
+ double x;
367
+ #endif
368
+ {
369
+ #ifdef __STDC__
370
+ const double *p,*q;
371
+ #else
372
+ double *p,*q;
373
+ #endif
374
+ fd_twoints u;
375
+ double z,r,s;
376
+ int ix;
377
+ u.d = x;
378
+ ix = 0x7fffffff&__HI(u);
379
+ if(ix>=0x40200000) {p = pR8; q= pS8;}
380
+ else if(ix>=0x40122E8B){p = pR5; q= pS5;}
381
+ else if(ix>=0x4006DB6D){p = pR3; q= pS3;}
382
+ else if(ix>=0x40000000){p = pR2; q= pS2;}
383
+ z = one/(x*x);
384
+ r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
385
+ s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4]))));
386
+ return one+ r/s;
387
+ }
388
+
389
+
390
+ /* For x >= 8, the asymptotic expansions of qzero is
391
+ * -1/8 s + 75/1024 s^3 - ..., where s = 1/x.
392
+ * We approximate pzero by
393
+ * qzero(x) = s*(-1.25 + (R/S))
394
+ * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10
395
+ * S = 1 + qS0*s^2 + ... + qS5*s^12
396
+ * and
397
+ * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22)
398
+ */
399
+ #ifdef __STDC__
400
+ static const double qR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */
401
+ #else
402
+ static double qR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */
403
+ #endif
404
+ 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
405
+ 7.32421874999935051953e-02, /* 0x3FB2BFFF, 0xFFFFFE2C */
406
+ 1.17682064682252693899e+01, /* 0x40278952, 0x5BB334D6 */
407
+ 5.57673380256401856059e+02, /* 0x40816D63, 0x15301825 */
408
+ 8.85919720756468632317e+03, /* 0x40C14D99, 0x3E18F46D */
409
+ 3.70146267776887834771e+04, /* 0x40E212D4, 0x0E901566 */
410
+ };
411
+ #ifdef __STDC__
412
+ static const double qS8[6] = {
413
+ #else
414
+ static double qS8[6] = {
415
+ #endif
416
+ 1.63776026895689824414e+02, /* 0x406478D5, 0x365B39BC */
417
+ 8.09834494656449805916e+03, /* 0x40BFA258, 0x4E6B0563 */
418
+ 1.42538291419120476348e+05, /* 0x41016652, 0x54D38C3F */
419
+ 8.03309257119514397345e+05, /* 0x412883DA, 0x83A52B43 */
420
+ 8.40501579819060512818e+05, /* 0x4129A66B, 0x28DE0B3D */
421
+ -3.43899293537866615225e+05, /* 0xC114FD6D, 0x2C9530C5 */
422
+ };
423
+
424
+ #ifdef __STDC__
425
+ static const double qR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */
426
+ #else
427
+ static double qR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */
428
+ #endif
429
+ 1.84085963594515531381e-11, /* 0x3DB43D8F, 0x29CC8CD9 */
430
+ 7.32421766612684765896e-02, /* 0x3FB2BFFF, 0xD172B04C */
431
+ 5.83563508962056953777e+00, /* 0x401757B0, 0xB9953DD3 */
432
+ 1.35111577286449829671e+02, /* 0x4060E392, 0x0A8788E9 */
433
+ 1.02724376596164097464e+03, /* 0x40900CF9, 0x9DC8C481 */
434
+ 1.98997785864605384631e+03, /* 0x409F17E9, 0x53C6E3A6 */
435
+ };
436
+ #ifdef __STDC__
437
+ static const double qS5[6] = {
438
+ #else
439
+ static double qS5[6] = {
440
+ #endif
441
+ 8.27766102236537761883e+01, /* 0x4054B1B3, 0xFB5E1543 */
442
+ 2.07781416421392987104e+03, /* 0x40A03BA0, 0xDA21C0CE */
443
+ 1.88472887785718085070e+04, /* 0x40D267D2, 0x7B591E6D */
444
+ 5.67511122894947329769e+04, /* 0x40EBB5E3, 0x97E02372 */
445
+ 3.59767538425114471465e+04, /* 0x40E19118, 0x1F7A54A0 */
446
+ -5.35434275601944773371e+03, /* 0xC0B4EA57, 0xBEDBC609 */
447
+ };
448
+
449
+ #ifdef __STDC__
450
+ static const double qR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */
451
+ #else
452
+ static double qR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */
453
+ #endif
454
+ 4.37741014089738620906e-09, /* 0x3E32CD03, 0x6ADECB82 */
455
+ 7.32411180042911447163e-02, /* 0x3FB2BFEE, 0x0E8D0842 */
456
+ 3.34423137516170720929e+00, /* 0x400AC0FC, 0x61149CF5 */
457
+ 4.26218440745412650017e+01, /* 0x40454F98, 0x962DAEDD */
458
+ 1.70808091340565596283e+02, /* 0x406559DB, 0xE25EFD1F */
459
+ 1.66733948696651168575e+02, /* 0x4064D77C, 0x81FA21E0 */
460
+ };
461
+ #ifdef __STDC__
462
+ static const double qS3[6] = {
463
+ #else
464
+ static double qS3[6] = {
465
+ #endif
466
+ 4.87588729724587182091e+01, /* 0x40486122, 0xBFE343A6 */
467
+ 7.09689221056606015736e+02, /* 0x40862D83, 0x86544EB3 */
468
+ 3.70414822620111362994e+03, /* 0x40ACF04B, 0xE44DFC63 */
469
+ 6.46042516752568917582e+03, /* 0x40B93C6C, 0xD7C76A28 */
470
+ 2.51633368920368957333e+03, /* 0x40A3A8AA, 0xD94FB1C0 */
471
+ -1.49247451836156386662e+02, /* 0xC062A7EB, 0x201CF40F */
472
+ };
473
+
474
+ #ifdef __STDC__
475
+ static const double qR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */
476
+ #else
477
+ static double qR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */
478
+ #endif
479
+ 1.50444444886983272379e-07, /* 0x3E84313B, 0x54F76BDB */
480
+ 7.32234265963079278272e-02, /* 0x3FB2BEC5, 0x3E883E34 */
481
+ 1.99819174093815998816e+00, /* 0x3FFFF897, 0xE727779C */
482
+ 1.44956029347885735348e+01, /* 0x402CFDBF, 0xAAF96FE5 */
483
+ 3.16662317504781540833e+01, /* 0x403FAA8E, 0x29FBDC4A */
484
+ 1.62527075710929267416e+01, /* 0x403040B1, 0x71814BB4 */
485
+ };
486
+ #ifdef __STDC__
487
+ static const double qS2[6] = {
488
+ #else
489
+ static double qS2[6] = {
490
+ #endif
491
+ 3.03655848355219184498e+01, /* 0x403E5D96, 0xF7C07AED */
492
+ 2.69348118608049844624e+02, /* 0x4070D591, 0xE4D14B40 */
493
+ 8.44783757595320139444e+02, /* 0x408A6645, 0x22B3BF22 */
494
+ 8.82935845112488550512e+02, /* 0x408B977C, 0x9C5CC214 */
495
+ 2.12666388511798828631e+02, /* 0x406A9553, 0x0E001365 */
496
+ -5.31095493882666946917e+00, /* 0xC0153E6A, 0xF8B32931 */
497
+ };
498
+
499
+ #ifdef __STDC__
500
+ static double qzero(double x)
501
+ #else
502
+ static double qzero(x)
503
+ double x;
504
+ #endif
505
+ {
506
+ #ifdef __STDC__
507
+ const double *p,*q;
508
+ #else
509
+ double *p,*q;
510
+ #endif
511
+ fd_twoints u;
512
+ double s,r,z;
513
+ int ix;
514
+ u.d = x;
515
+ ix = 0x7fffffff&__HI(u);
516
+ if(ix>=0x40200000) {p = qR8; q= qS8;}
517
+ else if(ix>=0x40122E8B){p = qR5; q= qS5;}
518
+ else if(ix>=0x4006DB6D){p = qR3; q= qS3;}
519
+ else if(ix>=0x40000000){p = qR2; q= qS2;}
520
+ z = one/(x*x);
521
+ r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
522
+ s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5])))));
523
+ return (-.125 + r/s)/x;
524
+ }