johnson 2.0.0.pre1 → 2.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. data/CHANGELOG.rdoc +12 -0
  2. data/Manifest.txt +4 -285
  3. data/Rakefile +13 -20
  4. data/ext/tracemonkey/global.cc +4 -1
  5. data/ext/tracemonkey/js.cc +30 -33
  6. data/ext/tracemonkey/runtime.cc +96 -6
  7. data/ext/tracemonkey/split_global.cc +0 -5
  8. data/ext/tracemonkey/tracemonkey.h +2 -2
  9. data/lib/johnson.rb +2 -2
  10. data/lib/johnson/runtime.rb +25 -15
  11. data/lib/johnson/tracemonkey/runtime.rb +6 -3
  12. data/vendor/tracemonkey/config/system-headers +1 -3
  13. data/vendor/tracemonkey/jscntxt.h +5 -2
  14. data/vendor/tracemonkey/jsdbgapi.cpp +9 -1
  15. data/vendor/tracemonkey/jsdbgapi.h +4 -0
  16. data/vendor/tracemonkey/tests/ecma/NativeObjects/browser.js +0 -0
  17. data/vendor/tracemonkey/tests/ecma/NativeObjects/jstests.list +0 -0
  18. data/vendor/tracemonkey/tests/ecma_3_1/Object/jstests.list +1 -1
  19. data/vendor/tracemonkey/tests/js1_3/misc/browser.js +0 -0
  20. data/vendor/tracemonkey/tests/js1_3/misc/jstests.list +0 -0
  21. data/vendor/tracemonkey/tests/js1_5/Regress/jstests.list +4 -4
  22. data/vendor/tracemonkey/tests/js1_5/Scope/jstests.list +1 -1
  23. data/vendor/tracemonkey/tests/js1_5/decompilation/jstests.list +2 -2
  24. data/vendor/tracemonkey/tests/js1_7/decompilation/jstests.list +1 -1
  25. data/vendor/tracemonkey/tests/shell.js +2 -1
  26. metadata +51 -309
  27. data/ext/spidermonkey/context.c +0 -116
  28. data/ext/spidermonkey/context.h +0 -19
  29. data/ext/spidermonkey/conversions.c +0 -361
  30. data/ext/spidermonkey/conversions.h +0 -31
  31. data/ext/spidermonkey/debugger.c +0 -234
  32. data/ext/spidermonkey/debugger.h +0 -10
  33. data/ext/spidermonkey/extconf.rb +0 -32
  34. data/ext/spidermonkey/extensions.c +0 -37
  35. data/ext/spidermonkey/extensions.h +0 -12
  36. data/ext/spidermonkey/global.c +0 -40
  37. data/ext/spidermonkey/global.h +0 -11
  38. data/ext/spidermonkey/idhash.c +0 -16
  39. data/ext/spidermonkey/idhash.h +0 -8
  40. data/ext/spidermonkey/immutable_node.c +0 -1153
  41. data/ext/spidermonkey/immutable_node.c.erb +0 -523
  42. data/ext/spidermonkey/immutable_node.h +0 -22
  43. data/ext/spidermonkey/jroot.h +0 -197
  44. data/ext/spidermonkey/js_land_proxy.c +0 -620
  45. data/ext/spidermonkey/js_land_proxy.h +0 -20
  46. data/ext/spidermonkey/ruby_land_proxy.c +0 -618
  47. data/ext/spidermonkey/ruby_land_proxy.h +0 -38
  48. data/ext/spidermonkey/runtime.c +0 -396
  49. data/ext/spidermonkey/runtime.h +0 -27
  50. data/ext/spidermonkey/spidermonkey.c +0 -22
  51. data/ext/spidermonkey/spidermonkey.h +0 -29
  52. data/lib/johnson/spidermonkey.rb +0 -12
  53. data/lib/johnson/spidermonkey/context.rb +0 -10
  54. data/lib/johnson/spidermonkey/debugger.rb +0 -67
  55. data/lib/johnson/spidermonkey/immutable_node.rb +0 -282
  56. data/lib/johnson/spidermonkey/js_land_proxy.rb +0 -64
  57. data/lib/johnson/spidermonkey/mutable_tree_visitor.rb +0 -242
  58. data/lib/johnson/spidermonkey/ruby_land_proxy.rb +0 -17
  59. data/lib/johnson/spidermonkey/runtime.rb +0 -74
  60. data/test/johnson/spidermonkey/context_test.rb +0 -21
  61. data/test/johnson/spidermonkey/immutable_node_test.rb +0 -34
  62. data/test/johnson/spidermonkey/js_land_proxy_test.rb +0 -273
  63. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +0 -274
  64. data/test/johnson/spidermonkey/runtime_test.rb +0 -41
  65. data/vendor/spidermonkey/.cvsignore +0 -9
  66. data/vendor/spidermonkey/Makefile.in +0 -449
  67. data/vendor/spidermonkey/Makefile.ref +0 -365
  68. data/vendor/spidermonkey/README.html +0 -820
  69. data/vendor/spidermonkey/SpiderMonkey.rsp +0 -12
  70. data/vendor/spidermonkey/Y.js +0 -19
  71. data/vendor/spidermonkey/build.mk +0 -43
  72. data/vendor/spidermonkey/config.mk +0 -192
  73. data/vendor/spidermonkey/config/AIX4.1.mk +0 -65
  74. data/vendor/spidermonkey/config/AIX4.2.mk +0 -64
  75. data/vendor/spidermonkey/config/AIX4.3.mk +0 -65
  76. data/vendor/spidermonkey/config/Darwin.mk +0 -83
  77. data/vendor/spidermonkey/config/Darwin1.3.mk +0 -81
  78. data/vendor/spidermonkey/config/Darwin1.4.mk +0 -41
  79. data/vendor/spidermonkey/config/Darwin5.2.mk +0 -81
  80. data/vendor/spidermonkey/config/Darwin5.3.mk +0 -81
  81. data/vendor/spidermonkey/config/HP-UXB.10.10.mk +0 -77
  82. data/vendor/spidermonkey/config/HP-UXB.10.20.mk +0 -77
  83. data/vendor/spidermonkey/config/HP-UXB.11.00.mk +0 -80
  84. data/vendor/spidermonkey/config/IRIX.mk +0 -87
  85. data/vendor/spidermonkey/config/IRIX5.3.mk +0 -44
  86. data/vendor/spidermonkey/config/IRIX6.1.mk +0 -44
  87. data/vendor/spidermonkey/config/IRIX6.2.mk +0 -44
  88. data/vendor/spidermonkey/config/IRIX6.3.mk +0 -44
  89. data/vendor/spidermonkey/config/IRIX6.5.mk +0 -44
  90. data/vendor/spidermonkey/config/Linux_All.mk +0 -103
  91. data/vendor/spidermonkey/config/Mac_OS10.0.mk +0 -82
  92. data/vendor/spidermonkey/config/OSF1V4.0.mk +0 -72
  93. data/vendor/spidermonkey/config/OSF1V5.0.mk +0 -69
  94. data/vendor/spidermonkey/config/SunOS4.1.4.mk +0 -101
  95. data/vendor/spidermonkey/config/SunOS5.10.mk +0 -50
  96. data/vendor/spidermonkey/config/SunOS5.3.mk +0 -91
  97. data/vendor/spidermonkey/config/SunOS5.4.mk +0 -92
  98. data/vendor/spidermonkey/config/SunOS5.5.1.mk +0 -44
  99. data/vendor/spidermonkey/config/SunOS5.5.mk +0 -87
  100. data/vendor/spidermonkey/config/SunOS5.6.mk +0 -89
  101. data/vendor/spidermonkey/config/SunOS5.7.mk +0 -44
  102. data/vendor/spidermonkey/config/SunOS5.8.mk +0 -44
  103. data/vendor/spidermonkey/config/SunOS5.9.mk +0 -44
  104. data/vendor/spidermonkey/config/WINNT4.0.mk +0 -117
  105. data/vendor/spidermonkey/config/WINNT5.0.mk +0 -117
  106. data/vendor/spidermonkey/config/WINNT5.1.mk +0 -117
  107. data/vendor/spidermonkey/config/WINNT5.2.mk +0 -117
  108. data/vendor/spidermonkey/config/WINNT6.0.mk +0 -117
  109. data/vendor/spidermonkey/config/dgux.mk +0 -64
  110. data/vendor/spidermonkey/editline/Makefile.ref +0 -144
  111. data/vendor/spidermonkey/editline/README +0 -83
  112. data/vendor/spidermonkey/editline/editline.3 +0 -175
  113. data/vendor/spidermonkey/editline/editline.c +0 -1369
  114. data/vendor/spidermonkey/editline/editline.h +0 -135
  115. data/vendor/spidermonkey/editline/sysunix.c +0 -182
  116. data/vendor/spidermonkey/editline/unix.h +0 -82
  117. data/vendor/spidermonkey/fdlibm/.cvsignore +0 -7
  118. data/vendor/spidermonkey/fdlibm/Makefile.in +0 -127
  119. data/vendor/spidermonkey/fdlibm/Makefile.ref +0 -192
  120. data/vendor/spidermonkey/fdlibm/e_acos.c +0 -147
  121. data/vendor/spidermonkey/fdlibm/e_acosh.c +0 -105
  122. data/vendor/spidermonkey/fdlibm/e_asin.c +0 -156
  123. data/vendor/spidermonkey/fdlibm/e_atan2.c +0 -165
  124. data/vendor/spidermonkey/fdlibm/e_atanh.c +0 -110
  125. data/vendor/spidermonkey/fdlibm/e_cosh.c +0 -133
  126. data/vendor/spidermonkey/fdlibm/e_exp.c +0 -202
  127. data/vendor/spidermonkey/fdlibm/e_fmod.c +0 -184
  128. data/vendor/spidermonkey/fdlibm/e_gamma.c +0 -71
  129. data/vendor/spidermonkey/fdlibm/e_gamma_r.c +0 -70
  130. data/vendor/spidermonkey/fdlibm/e_hypot.c +0 -173
  131. data/vendor/spidermonkey/fdlibm/e_j0.c +0 -524
  132. data/vendor/spidermonkey/fdlibm/e_j1.c +0 -523
  133. data/vendor/spidermonkey/fdlibm/e_jn.c +0 -315
  134. data/vendor/spidermonkey/fdlibm/e_lgamma.c +0 -71
  135. data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +0 -347
  136. data/vendor/spidermonkey/fdlibm/e_log.c +0 -184
  137. data/vendor/spidermonkey/fdlibm/e_log10.c +0 -134
  138. data/vendor/spidermonkey/fdlibm/e_pow.c +0 -386
  139. data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +0 -222
  140. data/vendor/spidermonkey/fdlibm/e_remainder.c +0 -120
  141. data/vendor/spidermonkey/fdlibm/e_scalb.c +0 -89
  142. data/vendor/spidermonkey/fdlibm/e_sinh.c +0 -122
  143. data/vendor/spidermonkey/fdlibm/e_sqrt.c +0 -497
  144. data/vendor/spidermonkey/fdlibm/fdlibm.h +0 -273
  145. data/vendor/spidermonkey/fdlibm/fdlibm.mak +0 -1453
  146. data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
  147. data/vendor/spidermonkey/fdlibm/k_cos.c +0 -135
  148. data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +0 -354
  149. data/vendor/spidermonkey/fdlibm/k_sin.c +0 -114
  150. data/vendor/spidermonkey/fdlibm/k_standard.c +0 -785
  151. data/vendor/spidermonkey/fdlibm/k_tan.c +0 -170
  152. data/vendor/spidermonkey/fdlibm/s_asinh.c +0 -101
  153. data/vendor/spidermonkey/fdlibm/s_atan.c +0 -175
  154. data/vendor/spidermonkey/fdlibm/s_cbrt.c +0 -133
  155. data/vendor/spidermonkey/fdlibm/s_ceil.c +0 -120
  156. data/vendor/spidermonkey/fdlibm/s_copysign.c +0 -72
  157. data/vendor/spidermonkey/fdlibm/s_cos.c +0 -118
  158. data/vendor/spidermonkey/fdlibm/s_erf.c +0 -356
  159. data/vendor/spidermonkey/fdlibm/s_expm1.c +0 -267
  160. data/vendor/spidermonkey/fdlibm/s_fabs.c +0 -70
  161. data/vendor/spidermonkey/fdlibm/s_finite.c +0 -71
  162. data/vendor/spidermonkey/fdlibm/s_floor.c +0 -121
  163. data/vendor/spidermonkey/fdlibm/s_frexp.c +0 -99
  164. data/vendor/spidermonkey/fdlibm/s_ilogb.c +0 -85
  165. data/vendor/spidermonkey/fdlibm/s_isnan.c +0 -74
  166. data/vendor/spidermonkey/fdlibm/s_ldexp.c +0 -66
  167. data/vendor/spidermonkey/fdlibm/s_lib_version.c +0 -73
  168. data/vendor/spidermonkey/fdlibm/s_log1p.c +0 -211
  169. data/vendor/spidermonkey/fdlibm/s_logb.c +0 -79
  170. data/vendor/spidermonkey/fdlibm/s_matherr.c +0 -64
  171. data/vendor/spidermonkey/fdlibm/s_modf.c +0 -132
  172. data/vendor/spidermonkey/fdlibm/s_nextafter.c +0 -124
  173. data/vendor/spidermonkey/fdlibm/s_rint.c +0 -131
  174. data/vendor/spidermonkey/fdlibm/s_scalbn.c +0 -107
  175. data/vendor/spidermonkey/fdlibm/s_signgam.c +0 -40
  176. data/vendor/spidermonkey/fdlibm/s_significand.c +0 -68
  177. data/vendor/spidermonkey/fdlibm/s_sin.c +0 -118
  178. data/vendor/spidermonkey/fdlibm/s_tan.c +0 -112
  179. data/vendor/spidermonkey/fdlibm/s_tanh.c +0 -122
  180. data/vendor/spidermonkey/fdlibm/w_acos.c +0 -78
  181. data/vendor/spidermonkey/fdlibm/w_acosh.c +0 -78
  182. data/vendor/spidermonkey/fdlibm/w_asin.c +0 -80
  183. data/vendor/spidermonkey/fdlibm/w_atan2.c +0 -79
  184. data/vendor/spidermonkey/fdlibm/w_atanh.c +0 -81
  185. data/vendor/spidermonkey/fdlibm/w_cosh.c +0 -77
  186. data/vendor/spidermonkey/fdlibm/w_exp.c +0 -88
  187. data/vendor/spidermonkey/fdlibm/w_fmod.c +0 -78
  188. data/vendor/spidermonkey/fdlibm/w_gamma.c +0 -85
  189. data/vendor/spidermonkey/fdlibm/w_gamma_r.c +0 -81
  190. data/vendor/spidermonkey/fdlibm/w_hypot.c +0 -78
  191. data/vendor/spidermonkey/fdlibm/w_j0.c +0 -105
  192. data/vendor/spidermonkey/fdlibm/w_j1.c +0 -106
  193. data/vendor/spidermonkey/fdlibm/w_jn.c +0 -128
  194. data/vendor/spidermonkey/fdlibm/w_lgamma.c +0 -85
  195. data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +0 -81
  196. data/vendor/spidermonkey/fdlibm/w_log.c +0 -78
  197. data/vendor/spidermonkey/fdlibm/w_log10.c +0 -81
  198. data/vendor/spidermonkey/fdlibm/w_pow.c +0 -99
  199. data/vendor/spidermonkey/fdlibm/w_remainder.c +0 -77
  200. data/vendor/spidermonkey/fdlibm/w_scalb.c +0 -95
  201. data/vendor/spidermonkey/fdlibm/w_sinh.c +0 -77
  202. data/vendor/spidermonkey/fdlibm/w_sqrt.c +0 -77
  203. data/vendor/spidermonkey/javascript-trace.d +0 -73
  204. data/vendor/spidermonkey/js.c +0 -3951
  205. data/vendor/spidermonkey/js.mdp +0 -0
  206. data/vendor/spidermonkey/js.msg +0 -308
  207. data/vendor/spidermonkey/js.pkg +0 -2
  208. data/vendor/spidermonkey/js3240.rc +0 -79
  209. data/vendor/spidermonkey/jsOS240.def +0 -654
  210. data/vendor/spidermonkey/jsapi.c +0 -5836
  211. data/vendor/spidermonkey/jsapi.h +0 -2624
  212. data/vendor/spidermonkey/jsarena.c +0 -450
  213. data/vendor/spidermonkey/jsarena.h +0 -318
  214. data/vendor/spidermonkey/jsarray.c +0 -2996
  215. data/vendor/spidermonkey/jsarray.h +0 -127
  216. data/vendor/spidermonkey/jsatom.c +0 -1045
  217. data/vendor/spidermonkey/jsatom.h +0 -442
  218. data/vendor/spidermonkey/jsbit.h +0 -253
  219. data/vendor/spidermonkey/jsbool.c +0 -176
  220. data/vendor/spidermonkey/jsbool.h +0 -73
  221. data/vendor/spidermonkey/jsclist.h +0 -139
  222. data/vendor/spidermonkey/jscntxt.c +0 -1348
  223. data/vendor/spidermonkey/jscntxt.h +0 -1120
  224. data/vendor/spidermonkey/jscompat.h +0 -57
  225. data/vendor/spidermonkey/jsconfig.h +0 -248
  226. data/vendor/spidermonkey/jsconfig.mk +0 -181
  227. data/vendor/spidermonkey/jscpucfg.c +0 -396
  228. data/vendor/spidermonkey/jscpucfg.h +0 -212
  229. data/vendor/spidermonkey/jsdate.c +0 -2390
  230. data/vendor/spidermonkey/jsdate.h +0 -124
  231. data/vendor/spidermonkey/jsdbgapi.c +0 -1802
  232. data/vendor/spidermonkey/jsdbgapi.h +0 -464
  233. data/vendor/spidermonkey/jsdhash.c +0 -868
  234. data/vendor/spidermonkey/jsdhash.h +0 -592
  235. data/vendor/spidermonkey/jsdtoa.c +0 -3167
  236. data/vendor/spidermonkey/jsdtoa.h +0 -130
  237. data/vendor/spidermonkey/jsdtracef.c +0 -317
  238. data/vendor/spidermonkey/jsdtracef.h +0 -77
  239. data/vendor/spidermonkey/jsemit.c +0 -6909
  240. data/vendor/spidermonkey/jsemit.h +0 -741
  241. data/vendor/spidermonkey/jsexn.c +0 -1371
  242. data/vendor/spidermonkey/jsexn.h +0 -96
  243. data/vendor/spidermonkey/jsfile.c +0 -2736
  244. data/vendor/spidermonkey/jsfile.h +0 -56
  245. data/vendor/spidermonkey/jsfile.msg +0 -90
  246. data/vendor/spidermonkey/jsfun.c +0 -2634
  247. data/vendor/spidermonkey/jsfun.h +0 -254
  248. data/vendor/spidermonkey/jsgc.c +0 -3562
  249. data/vendor/spidermonkey/jsgc.h +0 -403
  250. data/vendor/spidermonkey/jshash.c +0 -476
  251. data/vendor/spidermonkey/jshash.h +0 -151
  252. data/vendor/spidermonkey/jsify.pl +0 -485
  253. data/vendor/spidermonkey/jsinterp.c +0 -7007
  254. data/vendor/spidermonkey/jsinterp.h +0 -525
  255. data/vendor/spidermonkey/jsinvoke.c +0 -43
  256. data/vendor/spidermonkey/jsiter.c +0 -1067
  257. data/vendor/spidermonkey/jsiter.h +0 -122
  258. data/vendor/spidermonkey/jskeyword.tbl +0 -124
  259. data/vendor/spidermonkey/jskwgen.c +0 -460
  260. data/vendor/spidermonkey/jslibmath.h +0 -266
  261. data/vendor/spidermonkey/jslock.c +0 -1309
  262. data/vendor/spidermonkey/jslock.h +0 -313
  263. data/vendor/spidermonkey/jslocko.asm +0 -60
  264. data/vendor/spidermonkey/jslog2.c +0 -94
  265. data/vendor/spidermonkey/jslong.c +0 -264
  266. data/vendor/spidermonkey/jslong.h +0 -412
  267. data/vendor/spidermonkey/jsmath.c +0 -567
  268. data/vendor/spidermonkey/jsmath.h +0 -57
  269. data/vendor/spidermonkey/jsnum.c +0 -1239
  270. data/vendor/spidermonkey/jsnum.h +0 -283
  271. data/vendor/spidermonkey/jsobj.c +0 -5282
  272. data/vendor/spidermonkey/jsobj.h +0 -709
  273. data/vendor/spidermonkey/jsopcode.c +0 -5245
  274. data/vendor/spidermonkey/jsopcode.h +0 -394
  275. data/vendor/spidermonkey/jsopcode.tbl +0 -523
  276. data/vendor/spidermonkey/jsotypes.h +0 -202
  277. data/vendor/spidermonkey/jsparse.c +0 -6704
  278. data/vendor/spidermonkey/jsparse.h +0 -511
  279. data/vendor/spidermonkey/jsprf.c +0 -1264
  280. data/vendor/spidermonkey/jsprf.h +0 -150
  281. data/vendor/spidermonkey/jsproto.tbl +0 -128
  282. data/vendor/spidermonkey/jsprvtd.h +0 -267
  283. data/vendor/spidermonkey/jspubtd.h +0 -744
  284. data/vendor/spidermonkey/jsregexp.c +0 -4364
  285. data/vendor/spidermonkey/jsregexp.h +0 -183
  286. data/vendor/spidermonkey/jsreops.tbl +0 -145
  287. data/vendor/spidermonkey/jsscan.c +0 -2012
  288. data/vendor/spidermonkey/jsscan.h +0 -387
  289. data/vendor/spidermonkey/jsscope.c +0 -1957
  290. data/vendor/spidermonkey/jsscope.h +0 -418
  291. data/vendor/spidermonkey/jsscript.c +0 -1832
  292. data/vendor/spidermonkey/jsscript.h +0 -287
  293. data/vendor/spidermonkey/jsshell.msg +0 -50
  294. data/vendor/spidermonkey/jsstddef.h +0 -83
  295. data/vendor/spidermonkey/jsstr.c +0 -5005
  296. data/vendor/spidermonkey/jsstr.h +0 -641
  297. data/vendor/spidermonkey/jstypes.h +0 -475
  298. data/vendor/spidermonkey/jsutil.c +0 -345
  299. data/vendor/spidermonkey/jsutil.h +0 -157
  300. data/vendor/spidermonkey/jsxdrapi.c +0 -800
  301. data/vendor/spidermonkey/jsxdrapi.h +0 -218
  302. data/vendor/spidermonkey/jsxml.c +0 -8476
  303. data/vendor/spidermonkey/jsxml.h +0 -349
  304. data/vendor/spidermonkey/lock_SunOS.s +0 -119
  305. data/vendor/spidermonkey/perfect.js +0 -39
  306. data/vendor/spidermonkey/plify_jsdhash.sed +0 -36
  307. data/vendor/spidermonkey/prmjtime.c +0 -846
  308. data/vendor/spidermonkey/prmjtime.h +0 -103
  309. data/vendor/spidermonkey/resource.h +0 -15
  310. data/vendor/spidermonkey/rules.mk +0 -197
  311. data/vendor/spidermonkey/win32.order +0 -384
@@ -1,184 +0,0 @@
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_log.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_log(x)
53
- * Return the logrithm of x
54
- *
55
- * Method :
56
- * 1. Argument Reduction: find k and f such that
57
- * x = 2^k * (1+f),
58
- * where sqrt(2)/2 < 1+f < sqrt(2) .
59
- *
60
- * 2. Approximation of log(1+f).
61
- * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s)
62
- * = 2s + 2/3 s**3 + 2/5 s**5 + .....,
63
- * = 2s + s*R
64
- * We use a special Reme algorithm on [0,0.1716] to generate
65
- * a polynomial of degree 14 to approximate R The maximum error
66
- * of this polynomial approximation is bounded by 2**-58.45. In
67
- * other words,
68
- * 2 4 6 8 10 12 14
69
- * R(z) ~ Lg1*s +Lg2*s +Lg3*s +Lg4*s +Lg5*s +Lg6*s +Lg7*s
70
- * (the values of Lg1 to Lg7 are listed in the program)
71
- * and
72
- * | 2 14 | -58.45
73
- * | Lg1*s +...+Lg7*s - R(z) | <= 2
74
- * | |
75
- * Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2.
76
- * In order to guarantee error in log below 1ulp, we compute log
77
- * by
78
- * log(1+f) = f - s*(f - R) (if f is not too large)
79
- * log(1+f) = f - (hfsq - s*(hfsq+R)). (better accuracy)
80
- *
81
- * 3. Finally, log(x) = k*ln2 + log(1+f).
82
- * = k*ln2_hi+(f-(hfsq-(s*(hfsq+R)+k*ln2_lo)))
83
- * Here ln2 is split into two floating point number:
84
- * ln2_hi + ln2_lo,
85
- * where n*ln2_hi is always exact for |n| < 2000.
86
- *
87
- * Special cases:
88
- * log(x) is NaN with signal if x < 0 (including -INF) ;
89
- * log(+INF) is +INF; log(0) is -INF with signal;
90
- * log(NaN) is that NaN with no signal.
91
- *
92
- * Accuracy:
93
- * according to an error analysis, the error is always less than
94
- * 1 ulp (unit in the last place).
95
- *
96
- * Constants:
97
- * The hexadecimal values are the intended ones for the following
98
- * constants. The decimal values may be used, provided that the
99
- * compiler will convert from decimal to binary accurately enough
100
- * to produce the hexadecimal values shown.
101
- */
102
-
103
- #include "fdlibm.h"
104
-
105
- #ifdef __STDC__
106
- static const double
107
- #else
108
- static double
109
- #endif
110
- ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
111
- ln2_lo = 1.90821492927058770002e-10, /* 3dea39ef 35793c76 */
112
- two54 = 1.80143985094819840000e+16, /* 43500000 00000000 */
113
- Lg1 = 6.666666666666735130e-01, /* 3FE55555 55555593 */
114
- Lg2 = 3.999999999940941908e-01, /* 3FD99999 9997FA04 */
115
- Lg3 = 2.857142874366239149e-01, /* 3FD24924 94229359 */
116
- Lg4 = 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */
117
- Lg5 = 1.818357216161805012e-01, /* 3FC74664 96CB03DE */
118
- Lg6 = 1.531383769920937332e-01, /* 3FC39A09 D078C69F */
119
- Lg7 = 1.479819860511658591e-01; /* 3FC2F112 DF3E5244 */
120
-
121
- static double zero = 0.0;
122
-
123
- #ifdef __STDC__
124
- double __ieee754_log(double x)
125
- #else
126
- double __ieee754_log(x)
127
- double x;
128
- #endif
129
- {
130
- fd_twoints u;
131
- double hfsq,f,s,z,R,w,t1,t2,dk;
132
- int k,hx,i,j;
133
- unsigned lx;
134
-
135
- u.d = x;
136
- hx = __HI(u); /* high word of x */
137
- lx = __LO(u); /* low word of x */
138
-
139
- k=0;
140
- if (hx < 0x00100000) { /* x < 2**-1022 */
141
- if (((hx&0x7fffffff)|lx)==0)
142
- return -two54/zero; /* log(+-0)=-inf */
143
- if (hx<0) return (x-x)/zero; /* log(-#) = NaN */
144
- k -= 54; x *= two54; /* subnormal number, scale up x */
145
- u.d = x;
146
- hx = __HI(u); /* high word of x */
147
- }
148
- if (hx >= 0x7ff00000) return x+x;
149
- k += (hx>>20)-1023;
150
- hx &= 0x000fffff;
151
- i = (hx+0x95f64)&0x100000;
152
- u.d = x;
153
- __HI(u) = hx|(i^0x3ff00000); /* normalize x or x/2 */
154
- x = u.d;
155
- k += (i>>20);
156
- f = x-1.0;
157
- if((0x000fffff&(2+hx))<3) { /* |f| < 2**-20 */
158
- if(f==zero) {
159
- if(k==0) return zero; else {dk=(double)k;
160
- return dk*ln2_hi+dk*ln2_lo;}
161
- }
162
- R = f*f*(0.5-0.33333333333333333*f);
163
- if(k==0) return f-R; else {dk=(double)k;
164
- return dk*ln2_hi-((R-dk*ln2_lo)-f);}
165
- }
166
- s = f/(2.0+f);
167
- dk = (double)k;
168
- z = s*s;
169
- i = hx-0x6147a;
170
- w = z*z;
171
- j = 0x6b851-hx;
172
- t1= w*(Lg2+w*(Lg4+w*Lg6));
173
- t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7)));
174
- i |= j;
175
- R = t2+t1;
176
- if(i>0) {
177
- hfsq=0.5*f*f;
178
- if(k==0) return f-(hfsq-s*(hfsq+R)); else
179
- return dk*ln2_hi-((hfsq-(s*(hfsq+R)+dk*ln2_lo))-f);
180
- } else {
181
- if(k==0) return f-s*(f-R); else
182
- return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f);
183
- }
184
- }
@@ -1,134 +0,0 @@
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_log10.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_log10(x)
53
- * Return the base 10 logarithm of x
54
- *
55
- * Method :
56
- * Let log10_2hi = leading 40 bits of log10(2) and
57
- * log10_2lo = log10(2) - log10_2hi,
58
- * ivln10 = 1/log(10) rounded.
59
- * Then
60
- * n = ilogb(x),
61
- * if(n<0) n = n+1;
62
- * x = scalbn(x,-n);
63
- * log10(x) := n*log10_2hi + (n*log10_2lo + ivln10*log(x))
64
- *
65
- * Note 1:
66
- * To guarantee log10(10**n)=n, where 10**n is normal, the rounding
67
- * mode must set to Round-to-Nearest.
68
- * Note 2:
69
- * [1/log(10)] rounded to 53 bits has error .198 ulps;
70
- * log10 is monotonic at all binary break points.
71
- *
72
- * Special cases:
73
- * log10(x) is NaN with signal if x < 0;
74
- * log10(+INF) is +INF with no signal; log10(0) is -INF with signal;
75
- * log10(NaN) is that NaN with no signal;
76
- * log10(10**N) = N for N=0,1,...,22.
77
- *
78
- * Constants:
79
- * The hexadecimal values are the intended ones for the following constants.
80
- * The decimal values may be used, provided that the compiler will convert
81
- * from decimal to binary accurately enough to produce the hexadecimal values
82
- * shown.
83
- */
84
-
85
- #include "fdlibm.h"
86
-
87
- #ifdef __STDC__
88
- static const double
89
- #else
90
- static double
91
- #endif
92
- two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
93
- ivln10 = 4.34294481903251816668e-01, /* 0x3FDBCB7B, 0x1526E50E */
94
- log10_2hi = 3.01029995663611771306e-01, /* 0x3FD34413, 0x509F6000 */
95
- log10_2lo = 3.69423907715893078616e-13; /* 0x3D59FEF3, 0x11F12B36 */
96
-
97
- static double zero = 0.0;
98
-
99
- #ifdef __STDC__
100
- double __ieee754_log10(double x)
101
- #else
102
- double __ieee754_log10(x)
103
- double x;
104
- #endif
105
- {
106
- fd_twoints u;
107
- double y,z;
108
- int i,k,hx;
109
- unsigned lx;
110
-
111
- u.d = x;
112
- hx = __HI(u); /* high word of x */
113
- lx = __LO(u); /* low word of x */
114
-
115
- k=0;
116
- if (hx < 0x00100000) { /* x < 2**-1022 */
117
- if (((hx&0x7fffffff)|lx)==0)
118
- return -two54/zero; /* log(+-0)=-inf */
119
- if (hx<0) return (x-x)/zero; /* log(-#) = NaN */
120
- k -= 54; x *= two54; /* subnormal number, scale up x */
121
- u.d = x;
122
- hx = __HI(u); /* high word of x */
123
- }
124
- if (hx >= 0x7ff00000) return x+x;
125
- k += (hx>>20)-1023;
126
- i = ((unsigned)k&0x80000000)>>31;
127
- hx = (hx&0x000fffff)|((0x3ff-i)<<20);
128
- y = (double)(k+i);
129
- u.d = x;
130
- __HI(u) = hx;
131
- x = u.d;
132
- z = y*log10_2lo + ivln10*__ieee754_log(x);
133
- return z+y*log10_2hi;
134
- }
@@ -1,386 +0,0 @@
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_pow.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_pow(x,y) return x**y
53
- *
54
- * n
55
- * Method: Let x = 2 * (1+f)
56
- * 1. Compute and return log2(x) in two pieces:
57
- * log2(x) = w1 + w2,
58
- * where w1 has 53-24 = 29 bit trailing zeros.
59
- * 2. Perform y*log2(x) = n+y' by simulating muti-precision
60
- * arithmetic, where |y'|<=0.5.
61
- * 3. Return x**y = 2**n*exp(y'*log2)
62
- *
63
- * Special cases:
64
- * 1. (anything) ** 0 is 1
65
- * 2. (anything) ** 1 is itself
66
- * 3. (anything) ** NAN is NAN
67
- * 4. NAN ** (anything except 0) is NAN
68
- * 5. +-(|x| > 1) ** +INF is +INF
69
- * 6. +-(|x| > 1) ** -INF is +0
70
- * 7. +-(|x| < 1) ** +INF is +0
71
- * 8. +-(|x| < 1) ** -INF is +INF
72
- * 9. +-1 ** +-INF is NAN
73
- * 10. +0 ** (+anything except 0, NAN) is +0
74
- * 11. -0 ** (+anything except 0, NAN, odd integer) is +0
75
- * 12. +0 ** (-anything except 0, NAN) is +INF
76
- * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF
77
- * 14. -0 ** (odd integer) = -( +0 ** (odd integer) )
78
- * 15. +INF ** (+anything except 0,NAN) is +INF
79
- * 16. +INF ** (-anything except 0,NAN) is +0
80
- * 17. -INF ** (anything) = -0 ** (-anything)
81
- * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer)
82
- * 19. (-anything except 0 and inf) ** (non-integer) is NAN
83
- *
84
- * Accuracy:
85
- * pow(x,y) returns x**y nearly rounded. In particular
86
- * pow(integer,integer)
87
- * always returns the correct integer provided it is
88
- * representable.
89
- *
90
- * Constants :
91
- * The hexadecimal values are the intended ones for the following
92
- * constants. The decimal values may be used, provided that the
93
- * compiler will convert from decimal to binary accurately enough
94
- * to produce the hexadecimal values shown.
95
- */
96
-
97
- #include "fdlibm.h"
98
-
99
- #if defined(_MSC_VER)
100
- /* Microsoft Compiler */
101
- #pragma warning( disable : 4723 ) /* disables potential divide by 0 warning */
102
- #endif
103
-
104
- #ifdef __STDC__
105
- static const double
106
- #else
107
- static double
108
- #endif
109
- bp[] = {1.0, 1.5,},
110
- dp_h[] = { 0.0, 5.84962487220764160156e-01,}, /* 0x3FE2B803, 0x40000000 */
111
- dp_l[] = { 0.0, 1.35003920212974897128e-08,}, /* 0x3E4CFDEB, 0x43CFD006 */
112
- zero = 0.0,
113
- one = 1.0,
114
- two = 2.0,
115
- two53 = 9007199254740992.0, /* 0x43400000, 0x00000000 */
116
- really_big = 1.0e300,
117
- tiny = 1.0e-300,
118
- /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */
119
- L1 = 5.99999999999994648725e-01, /* 0x3FE33333, 0x33333303 */
120
- L2 = 4.28571428578550184252e-01, /* 0x3FDB6DB6, 0xDB6FABFF */
121
- L3 = 3.33333329818377432918e-01, /* 0x3FD55555, 0x518F264D */
122
- L4 = 2.72728123808534006489e-01, /* 0x3FD17460, 0xA91D4101 */
123
- L5 = 2.30660745775561754067e-01, /* 0x3FCD864A, 0x93C9DB65 */
124
- L6 = 2.06975017800338417784e-01, /* 0x3FCA7E28, 0x4A454EEF */
125
- P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
126
- P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
127
- P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
128
- P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
129
- P5 = 4.13813679705723846039e-08, /* 0x3E663769, 0x72BEA4D0 */
130
- lg2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */
131
- lg2_h = 6.93147182464599609375e-01, /* 0x3FE62E43, 0x00000000 */
132
- lg2_l = -1.90465429995776804525e-09, /* 0xBE205C61, 0x0CA86C39 */
133
- ovt = 8.0085662595372944372e-0017, /* -(1024-log2(ovfl+.5ulp)) */
134
- cp = 9.61796693925975554329e-01, /* 0x3FEEC709, 0xDC3A03FD =2/(3ln2) */
135
- cp_h = 9.61796700954437255859e-01, /* 0x3FEEC709, 0xE0000000 =(float)cp */
136
- cp_l = -7.02846165095275826516e-09, /* 0xBE3E2FE0, 0x145B01F5 =tail of cp_h*/
137
- ivln2 = 1.44269504088896338700e+00, /* 0x3FF71547, 0x652B82FE =1/ln2 */
138
- ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/
139
- ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/
140
-
141
- #ifdef __STDC__
142
- double __ieee754_pow(double x, double y)
143
- #else
144
- double __ieee754_pow(x,y)
145
- double x, y;
146
- #endif
147
- {
148
- fd_twoints ux, uy, uz;
149
- double y1,t1,p_h,t,z,ax;
150
- double z_h,z_l,p_l;
151
- double t2,r,s,u,v,w;
152
- int i,j,k,yisint,n;
153
- int hx,hy,ix,iy;
154
- unsigned lx,ly;
155
-
156
- ux.d = x; uy.d = y;
157
- hx = __HI(ux); lx = __LO(ux);
158
- hy = __HI(uy); ly = __LO(uy);
159
- ix = hx&0x7fffffff; iy = hy&0x7fffffff;
160
-
161
- /* y==zero: x**0 = 1 */
162
- if((iy|ly)==0) return one;
163
-
164
- /* +-NaN return x+y */
165
- if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) ||
166
- iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0)))
167
- return x+y;
168
-
169
- /* determine if y is an odd int when x < 0
170
- * yisint = 0 ... y is not an integer
171
- * yisint = 1 ... y is an odd int
172
- * yisint = 2 ... y is an even int
173
- */
174
- yisint = 0;
175
- if(hx<0) {
176
- if(iy>=0x43400000) yisint = 2; /* even integer y */
177
- else if(iy>=0x3ff00000) {
178
- k = (iy>>20)-0x3ff; /* exponent */
179
- if(k>20) {
180
- j = ly>>(52-k);
181
- if((j<<(52-k))==(int)ly) yisint = 2-(j&1);
182
- } else if(ly==0) {
183
- j = iy>>(20-k);
184
- if((j<<(20-k))==iy) yisint = 2-(j&1);
185
- }
186
- }
187
- }
188
-
189
- /* special value of y */
190
- if(ly==0) {
191
- if (iy==0x7ff00000) { /* y is +-inf */
192
- if(((ix-0x3ff00000)|lx)==0)
193
- #ifdef _WIN32
194
- /* VC++ optimizer reduces y - y to 0 */
195
- return y / y;
196
- #else
197
- return y - y; /* inf**+-1 is NaN */
198
- #endif
199
- else if (ix >= 0x3ff00000)/* (|x|>1)**+-inf = inf,0 */
200
- return (hy>=0)? y: zero;
201
- else /* (|x|<1)**-,+inf = inf,0 */
202
- return (hy<0)?-y: zero;
203
- }
204
- if(iy==0x3ff00000) { /* y is +-1 */
205
- if(hy<0) return one/x; else return x;
206
- }
207
- if(hy==0x40000000) return x*x; /* y is 2 */
208
- if(hy==0x3fe00000) { /* y is 0.5 */
209
- if(hx>=0) /* x >= +0 */
210
- return fd_sqrt(x);
211
- }
212
- }
213
-
214
- ax = fd_fabs(x);
215
- /* special value of x */
216
- if(lx==0) {
217
- if(ix==0x7ff00000||ix==0||ix==0x3ff00000){
218
- z = ax; /*x is +-0,+-inf,+-1*/
219
- if(hy<0) z = one/z; /* z = (1/|x|) */
220
- if(hx<0) {
221
- if(((ix-0x3ff00000)|yisint)==0) {
222
- z = (z-z)/(z-z); /* (-1)**non-int is NaN */
223
- } else if(yisint==1) {
224
- #ifdef HPUX
225
- uz.d = z;
226
- __HI(uz) ^= 1<<31; /* some HPUXes cannot negate 0.. */
227
- z = uz.d;
228
- #else
229
- z = -z; /* (x<0)**odd = -(|x|**odd) */
230
- #endif
231
- }
232
- }
233
- return z;
234
- }
235
- }
236
-
237
- /* (x<0)**(non-int) is NaN */
238
- if((((hx>>31)+1)|yisint)==0) return (x-x)/(x-x);
239
-
240
- /* |y| is really_big */
241
- if(iy>0x41e00000) { /* if |y| > 2**31 */
242
- if(iy>0x43f00000){ /* if |y| > 2**64, must o/uflow */
243
- if(ix<=0x3fefffff) return (hy<0)? really_big*really_big:tiny*tiny;
244
- if(ix>=0x3ff00000) return (hy>0)? really_big*really_big:tiny*tiny;
245
- }
246
- /* over/underflow if x is not close to one */
247
- if(ix<0x3fefffff) return (hy<0)? really_big*really_big:tiny*tiny;
248
- if(ix>0x3ff00000) return (hy>0)? really_big*really_big:tiny*tiny;
249
- /* now |1-x| is tiny <= 2**-20, suffice to compute
250
- log(x) by x-x^2/2+x^3/3-x^4/4 */
251
- t = x-1; /* t has 20 trailing zeros */
252
- w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
253
- u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
254
- v = t*ivln2_l-w*ivln2;
255
- t1 = u+v;
256
- uz.d = t1;
257
- __LO(uz) = 0;
258
- t1 = uz.d;
259
- t2 = v-(t1-u);
260
- } else {
261
- double s_h,t_h;
262
- double s2,s_l,t_l;
263
- n = 0;
264
- /* take care subnormal number */
265
- if(ix<0x00100000)
266
- {ax *= two53; n -= 53; uz.d = ax; ix = __HI(uz); }
267
- n += ((ix)>>20)-0x3ff;
268
- j = ix&0x000fffff;
269
- /* determine interval */
270
- ix = j|0x3ff00000; /* normalize ix */
271
- if(j<=0x3988E) k=0; /* |x|<sqrt(3/2) */
272
- else if(j<0xBB67A) k=1; /* |x|<sqrt(3) */
273
- else {k=0;n+=1;ix -= 0x00100000;}
274
- uz.d = ax;
275
- __HI(uz) = ix;
276
- ax = uz.d;
277
-
278
- /* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
279
- u = ax-bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
280
- v = one/(ax+bp[k]);
281
- s = u*v;
282
- s_h = s;
283
- uz.d = s_h;
284
- __LO(uz) = 0;
285
- s_h = uz.d;
286
- /* t_h=ax+bp[k] High */
287
- t_h = zero;
288
- uz.d = t_h;
289
- __HI(uz)=((ix>>1)|0x20000000)+0x00080000+(k<<18);
290
- t_h = uz.d;
291
- t_l = ax - (t_h-bp[k]);
292
- s_l = v*((u-s_h*t_h)-s_h*t_l);
293
- /* compute log(ax) */
294
- s2 = s*s;
295
- r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
296
- r += s_l*(s_h+s);
297
- s2 = s_h*s_h;
298
- t_h = 3.0+s2+r;
299
- uz.d = t_h;
300
- __LO(uz) = 0;
301
- t_h = uz.d;
302
- t_l = r-((t_h-3.0)-s2);
303
- /* u+v = s*(1+...) */
304
- u = s_h*t_h;
305
- v = s_l*t_h+t_l*s;
306
- /* 2/(3log2)*(s+...) */
307
- p_h = u+v;
308
- uz.d = p_h;
309
- __LO(uz) = 0;
310
- p_h = uz.d;
311
- p_l = v-(p_h-u);
312
- z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
313
- z_l = cp_l*p_h+p_l*cp+dp_l[k];
314
- /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
315
- t = (double)n;
316
- t1 = (((z_h+z_l)+dp_h[k])+t);
317
- uz.d = t1;
318
- __LO(uz) = 0;
319
- t1 = uz.d;
320
- t2 = z_l-(((t1-t)-dp_h[k])-z_h);
321
- }
322
-
323
- s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
324
- if((((hx>>31)+1)|(yisint-1))==0) s = -one;/* (-ve)**(odd int) */
325
-
326
- /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
327
- y1 = y;
328
- uy.d = y1;
329
- __LO(uy) = 0;
330
- y1 = uy.d;
331
- p_l = (y-y1)*t1+y*t2;
332
- p_h = y1*t1;
333
- z = p_l+p_h;
334
- uz.d = z;
335
- j = __HI(uz);
336
- i = __LO(uz);
337
-
338
- if (j>=0x40900000) { /* z >= 1024 */
339
- if(((j-0x40900000)|i)!=0) /* if z > 1024 */
340
- return s*really_big*really_big; /* overflow */
341
- else {
342
- if(p_l+ovt>z-p_h) return s*really_big*really_big; /* overflow */
343
- }
344
- } else if((j&0x7fffffff)>=0x4090cc00 ) { /* z <= -1075 */
345
- if(((j-0xc090cc00)|i)!=0) /* z < -1075 */
346
- return s*tiny*tiny; /* underflow */
347
- else {
348
- if(p_l<=z-p_h) return s*tiny*tiny; /* underflow */
349
- }
350
- }
351
- /*
352
- * compute 2**(p_h+p_l)
353
- */
354
- i = j&0x7fffffff;
355
- k = (i>>20)-0x3ff;
356
- n = 0;
357
- if(i>0x3fe00000) { /* if |z| > 0.5, set n = [z+0.5] */
358
- n = j+(0x00100000>>(k+1));
359
- k = ((n&0x7fffffff)>>20)-0x3ff; /* new k for n */
360
- t = zero;
361
- uz.d = t;
362
- __HI(uz) = (n&~(0x000fffff>>k));
363
- t = uz.d;
364
- n = ((n&0x000fffff)|0x00100000)>>(20-k);
365
- if(j<0) n = -n;
366
- p_h -= t;
367
- }
368
- t = p_l+p_h;
369
- uz.d = t;
370
- __LO(uz) = 0;
371
- t = uz.d;
372
- u = t*lg2_h;
373
- v = (p_l-(t-p_h))*lg2+t*lg2_l;
374
- z = u+v;
375
- w = v-(z-u);
376
- t = z*z;
377
- t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
378
- r = (z*t1)/(t1-two)-(w+z*w);
379
- z = one-(r-z);
380
- uz.d = z;
381
- j = __HI(uz);
382
- j += (n<<20);
383
- if((j>>20)<=0) z = fd_scalbn(z,n); /* subnormal output */
384
- else { uz.d = z; __HI(uz) += (n<<20); z = uz.d; }
385
- return s*z;
386
- }