numo-gsl 0.1.0

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 (266) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/README.md +84 -0
  4. data/Rakefile +16 -0
  5. data/ext/numo/gsl/cdf/depend +17 -0
  6. data/ext/numo/gsl/cdf/erbpp_cdf.rb +44 -0
  7. data/ext/numo/gsl/cdf/extconf.rb +9 -0
  8. data/ext/numo/gsl/cdf/func_def.rb +610 -0
  9. data/ext/numo/gsl/const/const_def.rb +419 -0
  10. data/ext/numo/gsl/const/depend +17 -0
  11. data/ext/numo/gsl/const/erbpp_const.rb +30 -0
  12. data/ext/numo/gsl/const/extconf.rb +9 -0
  13. data/ext/numo/gsl/err/depend +1 -0
  14. data/ext/numo/gsl/err/err.c +22 -0
  15. data/ext/numo/gsl/err/extconf.rb +9 -0
  16. data/ext/numo/gsl/extconf_gsl.rb +44 -0
  17. data/ext/numo/gsl/fit/depend +17 -0
  18. data/ext/numo/gsl/fit/erbpp_fit.rb +74 -0
  19. data/ext/numo/gsl/fit/extconf.rb +9 -0
  20. data/ext/numo/gsl/fit/func_def.rb +129 -0
  21. data/ext/numo/gsl/fit/tmpl/check_1d.c +9 -0
  22. data/ext/numo/gsl/fit/tmpl/fit_linear.c +53 -0
  23. data/ext/numo/gsl/fit/tmpl/fit_linear_est.c +56 -0
  24. data/ext/numo/gsl/fit/tmpl/fit_mul.c +50 -0
  25. data/ext/numo/gsl/fit/tmpl/fit_mul_est.c +47 -0
  26. data/ext/numo/gsl/fit/tmpl/fit_wlinear.c +59 -0
  27. data/ext/numo/gsl/fit/tmpl/fit_wmul.c +56 -0
  28. data/ext/numo/gsl/gen/erbpp2.rb +306 -0
  29. data/ext/numo/gsl/gen/erbpp_gsl.rb +166 -0
  30. data/ext/numo/gsl/gen/func_parser.rb +520 -0
  31. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_DFloat.c +40 -0
  32. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ.c +41 -0
  33. data/ext/numo/gsl/gen/tmpl/c_DFloat_f_SZ_x2.c +44 -0
  34. data/ext/numo/gsl/gen/tmpl/c_DFloat_x2_f_DFloat_x2.c +45 -0
  35. data/ext/numo/gsl/gen/tmpl/c_double_f_double.c +16 -0
  36. data/ext/numo/gsl/gen/tmpl/c_double_f_sizet.c +16 -0
  37. data/ext/numo/gsl/gen/tmpl/c_double_f_sizet_x2.c +17 -0
  38. data/ext/numo/gsl/gen/tmpl/c_double_f_void.c +15 -0
  39. data/ext/numo/gsl/gen/tmpl/c_double_x2_f_void.c +17 -0
  40. data/ext/numo/gsl/gen/tmpl/c_new_DFloat.c +29 -0
  41. data/ext/numo/gsl/gen/tmpl/c_new_double.c +22 -0
  42. data/ext/numo/gsl/gen/tmpl/c_new_f_other.c +25 -0
  43. data/ext/numo/gsl/gen/tmpl/c_new_sizet.c +22 -0
  44. data/ext/numo/gsl/gen/tmpl/c_new_sizet_double.c +23 -0
  45. data/ext/numo/gsl/gen/tmpl/c_new_sizet_x2.c +23 -0
  46. data/ext/numo/gsl/gen/tmpl/c_new_void.c +21 -0
  47. data/ext/numo/gsl/gen/tmpl/c_other_f_void.c +19 -0
  48. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat.c +46 -0
  49. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x2.c +41 -0
  50. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x3.c +44 -0
  51. data/ext/numo/gsl/gen/tmpl/c_self_f_DFloat_x4.c +47 -0
  52. data/ext/numo/gsl/gen/tmpl/c_self_f_SZ_x2_DFloat.c +45 -0
  53. data/ext/numo/gsl/gen/tmpl/c_self_f_double.c +17 -0
  54. data/ext/numo/gsl/gen/tmpl/c_self_f_other.c +17 -0
  55. data/ext/numo/gsl/gen/tmpl/c_self_f_sizet.c +21 -0
  56. data/ext/numo/gsl/gen/tmpl/c_self_f_void.c +14 -0
  57. data/ext/numo/gsl/gen/tmpl/c_sizet_f_void.c +15 -0
  58. data/ext/numo/gsl/gen/tmpl/c_sizet_x2_f_void.c +17 -0
  59. data/ext/numo/gsl/gen/tmpl/c_str_f_void.c +15 -0
  60. data/ext/numo/gsl/gen/tmpl/c_super_new_void.c +18 -0
  61. data/ext/numo/gsl/gen/tmpl/c_uint_f_void.c +15 -0
  62. data/ext/numo/gsl/gen/tmpl/c_ulong_f_void.c +15 -0
  63. data/ext/numo/gsl/gen/tmpl/c_void_f_double.c +17 -0
  64. data/ext/numo/gsl/gen/tmpl/c_void_f_double_x2.c +18 -0
  65. data/ext/numo/gsl/gen/tmpl/c_void_f_double_x4.c +20 -0
  66. data/ext/numo/gsl/gen/tmpl/c_void_f_ulong.c +17 -0
  67. data/ext/numo/gsl/gen/tmpl/c_void_f_void.c +14 -0
  68. data/ext/numo/gsl/gen/tmpl/cast_1d_contiguous.c +15 -0
  69. data/ext/numo/gsl/gen/tmpl/cast_2d_contiguous.c +15 -0
  70. data/ext/numo/gsl/gen/tmpl/class.c +26 -0
  71. data/ext/numo/gsl/gen/tmpl/create_new_narray.c +26 -0
  72. data/ext/numo/gsl/gen/tmpl/init_class.c +10 -0
  73. data/ext/numo/gsl/gen/tmpl/init_module.c +12 -0
  74. data/ext/numo/gsl/gen/tmpl/lib.c +41 -0
  75. data/ext/numo/gsl/gen/tmpl/m_DFloat_Int_f_DFloat.c +38 -0
  76. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat.c +35 -0
  77. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_Int.c +39 -0
  78. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_UInt.c +39 -0
  79. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double.c +42 -0
  80. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_double_x2.c +47 -0
  81. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_int.c +42 -0
  82. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x2.c +38 -0
  83. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_DFloat_x3.c +41 -0
  84. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_Int.c +36 -0
  85. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt.c +36 -0
  86. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32.c +36 -0
  87. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double.c +43 -0
  88. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_uint.c +49 -0
  89. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_double_x2.c +48 -0
  90. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt32_uint_x3.c +51 -0
  91. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double.c +43 -0
  92. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_uint.c +50 -0
  93. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_double_x2.c +48 -0
  94. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_UInt_uint_x3.c +51 -0
  95. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat.c +41 -0
  96. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_DFloat_x2.c +44 -0
  97. data/ext/numo/gsl/gen/tmpl/m_DFloat_f_int_x2_DFloat_x2.c +46 -0
  98. data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat.c +36 -0
  99. data/ext/numo/gsl/gen/tmpl/m_Int_f_DFloat_x3.c +42 -0
  100. data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat.c +42 -0
  101. data/ext/numo/gsl/gen/tmpl/m_Int_f_int_DFloat_x2.c +45 -0
  102. data/ext/numo/gsl/gen/tmpl/mod_func_noloop.c +54 -0
  103. data/ext/numo/gsl/gen/tmpl/mod_func_scalar.c +27 -0
  104. data/ext/numo/gsl/gen/tmpl/module.c +9 -0
  105. data/ext/numo/gsl/histogram/depend +17 -0
  106. data/ext/numo/gsl/histogram/erbpp_histogram.rb +109 -0
  107. data/ext/numo/gsl/histogram/extconf.rb +9 -0
  108. data/ext/numo/gsl/histogram/func_def.rb +763 -0
  109. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_2d_get.c +54 -0
  110. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_field.c +35 -0
  111. data/ext/numo/gsl/histogram/tmpl/c_DFloat_f_get.c +47 -0
  112. data/ext/numo/gsl/histogram/tmpl/c_DFloat_x2_f_get_range.c +56 -0
  113. data/ext/numo/gsl/histogram/tmpl/c_bool_f_other.c +19 -0
  114. data/ext/numo/gsl/histogram/tmpl/c_bool_f_pdf_init.c +24 -0
  115. data/ext/numo/gsl/histogram/tmpl/c_self_f_2d_set_ranges.c +26 -0
  116. data/ext/numo/gsl/histogram/tmpl/c_self_f_set_ranges.c +21 -0
  117. data/ext/numo/gsl/histogram/tmpl/c_sizet_f_field.c +15 -0
  118. data/ext/numo/gsl/interp/depend +17 -0
  119. data/ext/numo/gsl/interp/erbpp_interp.rb +59 -0
  120. data/ext/numo/gsl/interp/extconf.rb +9 -0
  121. data/ext/numo/gsl/interp/func_def.rb +816 -0
  122. data/ext/numo/gsl/interp/parse_interp.rb +67 -0
  123. data/ext/numo/gsl/interp/tmpl/interp2d_new.c +36 -0
  124. data/ext/numo/gsl/interp/tmpl/interp2d_type_new.c +17 -0
  125. data/ext/numo/gsl/interp/tmpl/interp_bsearch.c +57 -0
  126. data/ext/numo/gsl/interp/tmpl/interp_new.c +29 -0
  127. data/ext/numo/gsl/interp/tmpl/interp_type_new.c +16 -0
  128. data/ext/numo/gsl/interp/tmpl/spline2d_eval.c +61 -0
  129. data/ext/numo/gsl/interp/tmpl/spline_eval.c +55 -0
  130. data/ext/numo/gsl/interp/tmpl/spline_integ.c +56 -0
  131. data/ext/numo/gsl/interp/type_def.rb +9 -0
  132. data/ext/numo/gsl/multifit/depend +17 -0
  133. data/ext/numo/gsl/multifit/erbpp_multifit.rb +99 -0
  134. data/ext/numo/gsl/multifit/extconf.rb +9 -0
  135. data/ext/numo/gsl/multifit/func_2.1.rb +1035 -0
  136. data/ext/numo/gsl/multifit/func_2.2.1.rb +736 -0
  137. data/ext/numo/gsl/multifit/func_2.2.rb +736 -0
  138. data/ext/numo/gsl/multifit/func_2.3.rb +872 -0
  139. data/ext/numo/gsl/multifit/func_def.rb +1012 -0
  140. data/ext/numo/gsl/multifit/tmpl/multifit_linear.c +66 -0
  141. data/ext/numo/gsl/multifit/tmpl/multifit_linear_est.c +48 -0
  142. data/ext/numo/gsl/multifit/tmpl/multifit_linear_residuals.c +47 -0
  143. data/ext/numo/gsl/multifit/tmpl/multifit_wlinear.c +70 -0
  144. data/ext/numo/gsl/multifit/type_def.rb +1 -0
  145. data/ext/numo/gsl/numo_gsl.h +117 -0
  146. data/ext/numo/gsl/pdf/depend +17 -0
  147. data/ext/numo/gsl/pdf/erbpp_pdf.rb +26 -0
  148. data/ext/numo/gsl/pdf/extconf.rb +9 -0
  149. data/ext/numo/gsl/pdf/func_2.2.1.rb +306 -0
  150. data/ext/numo/gsl/pdf/func_2.2.rb +306 -0
  151. data/ext/numo/gsl/pdf/func_2.3.rb +306 -0
  152. data/ext/numo/gsl/pdf/func_def.rb +282 -0
  153. data/ext/numo/gsl/pdf/parse_pdf.rb +42 -0
  154. data/ext/numo/gsl/pdf/tmpl/dirichlet.c +39 -0
  155. data/ext/numo/gsl/pdf/tmpl/multinomial.c +39 -0
  156. data/ext/numo/gsl/poly/depend +17 -0
  157. data/ext/numo/gsl/poly/erbpp_poly.rb +70 -0
  158. data/ext/numo/gsl/poly/extconf.rb +9 -0
  159. data/ext/numo/gsl/poly/func_def.rb +234 -0
  160. data/ext/numo/gsl/poly/tmpl/poly_complex_solve.c +59 -0
  161. data/ext/numo/gsl/poly/tmpl/poly_eval.c +70 -0
  162. data/ext/numo/gsl/poly/tmpl/poly_eval_derivs.c +40 -0
  163. data/ext/numo/gsl/ran/depend +17 -0
  164. data/ext/numo/gsl/ran/erbpp_ran.rb +42 -0
  165. data/ext/numo/gsl/ran/extconf.rb +9 -0
  166. data/ext/numo/gsl/ran/func_2.2.1.rb +1658 -0
  167. data/ext/numo/gsl/ran/func_2.2.rb +1658 -0
  168. data/ext/numo/gsl/ran/func_2.3.rb +1658 -0
  169. data/ext/numo/gsl/ran/func_def.rb +1594 -0
  170. data/ext/numo/gsl/ran/parse_ran.rb +10 -0
  171. data/ext/numo/gsl/rng/depend +17 -0
  172. data/ext/numo/gsl/rng/erbpp_rng.rb +58 -0
  173. data/ext/numo/gsl/rng/extconf.rb +9 -0
  174. data/ext/numo/gsl/rng/func_def.rb +230 -0
  175. data/ext/numo/gsl/rng/parse_rng.rb +125 -0
  176. data/ext/numo/gsl/rng/tmpl/ran.c +40 -0
  177. data/ext/numo/gsl/rng/tmpl/ran_DFloat_f_DFloat.c +28 -0
  178. data/ext/numo/gsl/rng/tmpl/ran_DFloat_x2.c +45 -0
  179. data/ext/numo/gsl/rng/tmpl/ran_DFloat_x3.c +51 -0
  180. data/ext/numo/gsl/rng/tmpl/ran_multinomial.c +32 -0
  181. data/ext/numo/gsl/rng/tmpl/rng_DFloat.c +29 -0
  182. data/ext/numo/gsl/rng/tmpl/rng_UInt.c +44 -0
  183. data/ext/numo/gsl/rng/tmpl/rng_alloc.c +24 -0
  184. data/ext/numo/gsl/rng/tmpl/rng_type_new.c +14 -0
  185. data/ext/numo/gsl/rng/type_def.rb +63 -0
  186. data/ext/numo/gsl/rstat/depend +17 -0
  187. data/ext/numo/gsl/rstat/erbpp_rstat.rb +64 -0
  188. data/ext/numo/gsl/rstat/extconf.rb +9 -0
  189. data/ext/numo/gsl/rstat/func_2.2.1.rb +116 -0
  190. data/ext/numo/gsl/rstat/func_2.2.rb +116 -0
  191. data/ext/numo/gsl/rstat/func_2.3.rb +123 -0
  192. data/ext/numo/gsl/rstat/func_def.rb +102 -0
  193. data/ext/numo/gsl/sf/depend +17 -0
  194. data/ext/numo/gsl/sf/erbpp_sf.rb +51 -0
  195. data/ext/numo/gsl/sf/extconf.rb +9 -0
  196. data/ext/numo/gsl/sf/func_def.rb +4703 -0
  197. data/ext/numo/gsl/sf/parse_sf.rb +277 -0
  198. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat.c +50 -0
  199. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x2_DFloat_x2.c +52 -0
  200. data/ext/numo/gsl/sf/tmpl/c_DFloat_f_int_x3_DFloat_x2.c +55 -0
  201. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_DFloat_mode.c +47 -0
  202. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_lmax_array.c +41 -0
  203. data/ext/numo/gsl/sf/tmpl/m_DFloat_f_nmin_nmax_array.c +49 -0
  204. data/ext/numo/gsl/spmatrix/const_2.2.1.rb +3 -0
  205. data/ext/numo/gsl/spmatrix/const_2.2.rb +3 -0
  206. data/ext/numo/gsl/spmatrix/const_2.3.rb +3 -0
  207. data/ext/numo/gsl/spmatrix/const_def.rb +2 -0
  208. data/ext/numo/gsl/spmatrix/depend +17 -0
  209. data/ext/numo/gsl/spmatrix/erbpp_spmatrix.rb +100 -0
  210. data/ext/numo/gsl/spmatrix/extconf.rb +9 -0
  211. data/ext/numo/gsl/spmatrix/func_2.2.1.rb +297 -0
  212. data/ext/numo/gsl/spmatrix/func_2.2.rb +297 -0
  213. data/ext/numo/gsl/spmatrix/func_2.3.rb +297 -0
  214. data/ext/numo/gsl/spmatrix/func_def.rb +218 -0
  215. data/ext/numo/gsl/spmatrix/parse_spmatrix.rb +70 -0
  216. data/ext/numo/gsl/spmatrix/tmpl/itersolve_iterate.c +47 -0
  217. data/ext/numo/gsl/spmatrix/tmpl/itersolve_new.c +22 -0
  218. data/ext/numo/gsl/spmatrix/tmpl/itersolve_type_new.c +16 -0
  219. data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemm.c +35 -0
  220. data/ext/numo/gsl/spmatrix/tmpl/spblas_dgemv.c +43 -0
  221. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_add.c +22 -0
  222. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_d2sp.c +28 -0
  223. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_new.c +40 -0
  224. data/ext/numo/gsl/spmatrix/tmpl/spmatrix_sp2d.c +25 -0
  225. data/ext/numo/gsl/spmatrix/type_def.rb +1 -0
  226. data/ext/numo/gsl/stats/depend +17 -0
  227. data/ext/numo/gsl/stats/erbpp_stats.rb +29 -0
  228. data/ext/numo/gsl/stats/extconf.rb +9 -0
  229. data/ext/numo/gsl/stats/func_2.2.1.rb +608 -0
  230. data/ext/numo/gsl/stats/func_2.2.rb +608 -0
  231. data/ext/numo/gsl/stats/func_2.3.rb +608 -0
  232. data/ext/numo/gsl/stats/func_def.rb +608 -0
  233. data/ext/numo/gsl/stats/parse_stats.rb +63 -0
  234. data/ext/numo/gsl/stats/tmpl/stats_1a0p.c +37 -0
  235. data/ext/numo/gsl/stats/tmpl/stats_1a0p_index.c +60 -0
  236. data/ext/numo/gsl/stats/tmpl/stats_1a1p.c +41 -0
  237. data/ext/numo/gsl/stats/tmpl/stats_1a2p.c +42 -0
  238. data/ext/numo/gsl/stats/tmpl/stats_2a0p.c +39 -0
  239. data/ext/numo/gsl/stats/tmpl/stats_2a1p.c +43 -0
  240. data/ext/numo/gsl/stats/tmpl/stats_2a2p.c +44 -0
  241. data/ext/numo/gsl/stats/tmpl/stats_minmax.c +37 -0
  242. data/ext/numo/gsl/stats/tmpl/stats_minmax_index.c +67 -0
  243. data/ext/numo/gsl/stats/tmpl/stats_spearman.c +46 -0
  244. data/ext/numo/gsl/sys/const_def.rb +21 -0
  245. data/ext/numo/gsl/sys/depend +17 -0
  246. data/ext/numo/gsl/sys/enum_def.rb +75 -0
  247. data/ext/numo/gsl/sys/erbpp_sys.rb +60 -0
  248. data/ext/numo/gsl/sys/extconf.rb +9 -0
  249. data/ext/numo/gsl/sys/func_def.rb +249 -0
  250. data/ext/numo/gsl/version.h +1 -0
  251. data/ext/numo/gsl/wavelet/depend +17 -0
  252. data/ext/numo/gsl/wavelet/erbpp_wavelet.rb +48 -0
  253. data/ext/numo/gsl/wavelet/extconf.rb +9 -0
  254. data/ext/numo/gsl/wavelet/func_def.rb +337 -0
  255. data/ext/numo/gsl/wavelet/parse_wavelet.rb +47 -0
  256. data/ext/numo/gsl/wavelet/tmpl/wavelet2d_transform.c +56 -0
  257. data/ext/numo/gsl/wavelet/tmpl/wavelet_array_check.c +56 -0
  258. data/ext/numo/gsl/wavelet/tmpl/wavelet_macro.c +1 -0
  259. data/ext/numo/gsl/wavelet/tmpl/wavelet_new.c +20 -0
  260. data/ext/numo/gsl/wavelet/tmpl/wavelet_transform.c +55 -0
  261. data/ext/numo/gsl/wavelet/tmpl/wavelet_transform2.c +22 -0
  262. data/ext/numo/gsl/wavelet/tmpl/wavelet_type_new.c +15 -0
  263. data/ext/numo/gsl/wavelet/type_def.rb +6 -0
  264. data/lib/numo/gsl.rb +17 -0
  265. data/numo-gsl.gemspec +33 -0
  266. metadata +367 -0
@@ -0,0 +1,46 @@
1
+ static void
2
+ iter_<%=c_func%>(na_loop_t *const lp)
3
+ {
4
+ size_t n;
5
+ char *p1, *p2, *p3;
6
+ ssize_t s1, s2;
7
+ double *opt = (double*)(lp->opt_ptr);
8
+
9
+ INIT_COUNTER(lp, n);
10
+ INIT_PTR(lp, 0, p1, s1);
11
+ INIT_PTR(lp, 1, p2, s2);
12
+ p3 = lp->args[2].ptr + lp->args[2].iter[0].pos;
13
+
14
+ *(double*)p3 = <%=func_name%>((double*)p1,s1/sizeof(double),
15
+ (double*)p2,s2/sizeof(double),n,opt);
16
+ }
17
+
18
+ /*
19
+ <%=desc%>
20
+ @overload <%=name%>(<%=method_args%>, axis:nil, keepdims:false)
21
+ <% desc_param.each do |x|%>
22
+ <%=x%><% end %>
23
+ @param [Numeric,Array,Range] axis (keyword) Axes along which the operation is performed.
24
+ @param [TrueClass] keepdims (keyword) If true, the reduced axes are left in th*/
25
+ static VALUE
26
+ <%=c_func%>(int argc, VALUE *argv, VALUE mod)
27
+ {
28
+ VALUE reduce, v, buf = 0;
29
+ narray_t *na;
30
+ double *opt;
31
+ ndfunc_arg_in_t ain[3] = {{cDF,0},{cDF,0},{sym_reduce,0}};
32
+ ndfunc_arg_out_t aout[1] = {{cDF,0}};
33
+ ndfunc_t ndf = { iter_<%=c_func%>, STRIDE_LOOP_NIP|NDF_FLAT_REDUCE|NDF_EXTRACT,
34
+ 3, 1, ain, aout };
35
+
36
+ if (argc<2) {
37
+ rb_raise(rb_eArgError,"wrong number of argument (%d for >=2)",argc);
38
+ }
39
+
40
+ GetNArray(argv[0],na);
41
+ opt = ALLOCV_N(double,buf,na->size*2); // todo: get loop size
42
+ reduce = nary_reduce_dimension(argc-2, argv+2, 2, argv, &ndf, 0);
43
+ v = na_ndloop3(&ndf, opt, 3, argv[0], argv[1], reduce);
44
+ ALLOCV_END(buf);
45
+ return v;
46
+ }
@@ -0,0 +1,21 @@
1
+ [["GSL_MODE_DEFAULT", nil],
2
+ ["GSL_PREC_APPROX", nil],
3
+ ["GSL_PREC_DOUBLE", nil],
4
+ ["GSL_PREC_SINGLE", nil],
5
+ ["M_1_PI", "The reciprocal of pi, 1/\\pi "],
6
+ ["M_2_PI", "Twice the reciprocal of pi, 2/\\pi "],
7
+ ["M_2_SQRTPI", "Two divided by the square root of pi, 2/\\sqrt\\pi "],
8
+ ["M_E", "The base of exponentials, e "],
9
+ ["M_EULER", "Euler's constant, \\gamma "],
10
+ ["M_LN10", "The natural logarithm of ten, \\ln(10) "],
11
+ ["M_LN2", "The natural logarithm of two, \\ln(2) "],
12
+ ["M_LNPI", "The natural logarithm of pi, \\ln(\\pi) "],
13
+ ["M_LOG10E", "The base-10 logarithm of e, $\\log_{10}(e)$ \\log_10 (e) "],
14
+ ["M_LOG2E", "The base-2 logarithm of e, \\log_2 (e) "],
15
+ ["M_PI", "The constant pi, \\pi "],
16
+ ["M_PI_2", "Pi divided by two, \\pi/2 "],
17
+ ["M_PI_4", "Pi divided by four, \\pi/4 "],
18
+ ["M_SQRT1_2", "The square root of one-half, $\\sqrt{1/2}$ \\sqrt@{1/2@} "],
19
+ ["M_SQRT2", "The square root of two, \\sqrt 2 "],
20
+ ["M_SQRT3", "The square root of three, \\sqrt 3 "],
21
+ ["M_SQRTPI", "The square root of pi, \\sqrt\\pi "]]
@@ -0,0 +1,17 @@
1
+ COGEN=ruby erbpp_sys.rb
2
+ GENSRC=gsl_sys.c
3
+ GENDEPS=erbpp_sys.rb *_def.rb ../gen/*.rb ../gen/tmpl/*.c
4
+
5
+ src : $(GENSRC)
6
+
7
+ $(GENSRC) : $(GENDEPS)
8
+ $(COGEN) > $@
9
+
10
+ doc : $(GENSRC)
11
+ yard doc $(GENSRC)
12
+
13
+ clean: cleansrc cleandoc
14
+ cleansrc:
15
+ -$(Q)$(RM) $(GENSRC)
16
+ cleandoc:
17
+ -$(Q)$(RM_RF) doc .yardoc
@@ -0,0 +1,75 @@
1
+ [["GSL_EIGEN_SORT_VAL_ASC", 0, ""],
2
+ ["GSL_EIGEN_SORT_VAL_DESC", 1, ""],
3
+ ["GSL_EIGEN_SORT_ABS_ASC", 2, ""],
4
+ ["GSL_EIGEN_SORT_ABS_DESC", 3, ""],
5
+ ["GSL_SUCCESS", 0, ""],
6
+ ["GSL_FAILURE", -1, ""],
7
+ ["GSL_CONTINUE", -2, "iteration has not converged"],
8
+ ["GSL_EDOM", 1, "input domain error, e.g sqrt(-1)"],
9
+ ["GSL_ERANGE", 2, "output range error, e.g. exp(1e100)"],
10
+ ["GSL_EFAULT", 3, "invalid pointer"],
11
+ ["GSL_EINVAL", 4, "invalid argument supplied by user"],
12
+ ["GSL_EFAILED", 5, "generic failure"],
13
+ ["GSL_EFACTOR", 6, "factorization failed"],
14
+ ["GSL_ESANITY", 7, "sanity check failed - shouldn't happen"],
15
+ ["GSL_ENOMEM", 8, "malloc failed"],
16
+ ["GSL_EBADFUNC", 9, "problem with user-supplied function"],
17
+ ["GSL_ERUNAWAY", 10, "iterative process is out of control"],
18
+ ["GSL_EMAXITER", 11, "exceeded max number of iterations"],
19
+ ["GSL_EZERODIV", 12, "tried to divide by zero"],
20
+ ["GSL_EBADTOL", 13, "user specified an invalid tolerance"],
21
+ ["GSL_ETOL", 14, "failed to reach the specified tolerance"],
22
+ ["GSL_EUNDRFLW", 15, "underflow"],
23
+ ["GSL_EOVRFLW", 16, "overflow"],
24
+ ["GSL_ELOSS", 17, "loss of accuracy"],
25
+ ["GSL_EROUND", 18, "failed because of roundoff error"],
26
+ ["GSL_EBADLEN", 19, "matrix, vector lengths are not conformant"],
27
+ ["GSL_ENOTSQR", 20, "matrix not square"],
28
+ ["GSL_ESING", 21, "apparent singularity detected"],
29
+ ["GSL_EDIVERGE", 22, "integral or series is divergent"],
30
+ ["GSL_EUNSUP", 23, "requested feature is not supported by the hardware"],
31
+ ["GSL_EUNIMPL", 24, "requested feature not (yet) implemented"],
32
+ ["GSL_ECACHE", 25, "cache limit exceeded"],
33
+ ["GSL_ETABLE", 26, "table limit exceeded"],
34
+ ["GSL_ENOPROG", 27, "iteration is not making progress towards solution"],
35
+ ["GSL_ENOPROGJ", 28, "jacobian evaluations are not improving the solution"],
36
+ ["GSL_ETOLF", 29, "cannot reach the specified tolerance in F"],
37
+ ["GSL_ETOLX", 30, "cannot reach the specified tolerance in X"],
38
+ ["GSL_ETOLG", 31, "cannot reach the specified tolerance in gradient"],
39
+ ["GSL_EOF", 32, "end of file"],
40
+ ["GSL_MESSAGE_MASK_A", 1, ""],
41
+ ["GSL_MESSAGE_MASK_B", 2, ""],
42
+ ["GSL_MESSAGE_MASK_C", 4, ""],
43
+ ["GSL_MESSAGE_MASK_D", 8, ""],
44
+ ["GSL_MESSAGE_MASK_E", 16, ""],
45
+ ["GSL_MESSAGE_MASK_F", 32, ""],
46
+ ["GSL_MESSAGE_MASK_G", 64, ""],
47
+ ["GSL_MESSAGE_MASK_H", 128, ""],
48
+ ["GSL_IEEE_TYPE_NAN", 1, ""],
49
+ ["GSL_IEEE_TYPE_INF", 2, ""],
50
+ ["GSL_IEEE_TYPE_NORMAL", 3, ""],
51
+ ["GSL_IEEE_TYPE_DENORMAL", 4, ""],
52
+ ["GSL_IEEE_TYPE_ZERO", 5, ""],
53
+ ["GSL_IEEE_SINGLE_PRECISION", 1, ""],
54
+ ["GSL_IEEE_DOUBLE_PRECISION", 2, ""],
55
+ ["GSL_IEEE_EXTENDED_PRECISION", 3, ""],
56
+ ["GSL_IEEE_ROUND_TO_NEAREST", 1, ""],
57
+ ["GSL_IEEE_ROUND_DOWN", 2, ""],
58
+ ["GSL_IEEE_ROUND_UP", 3, ""],
59
+ ["GSL_IEEE_ROUND_TO_ZERO", 4, ""],
60
+ ["GSL_IEEE_MASK_INVALID", 1, ""],
61
+ ["GSL_IEEE_MASK_DENORMALIZED", 2, ""],
62
+ ["GSL_IEEE_MASK_DIVISION_BY_ZERO", 4, ""],
63
+ ["GSL_IEEE_MASK_OVERFLOW", 8, ""],
64
+ ["GSL_IEEE_MASK_UNDERFLOW", 16, ""],
65
+ ["GSL_IEEE_MASK_ALL", 31, ""],
66
+ ["GSL_IEEE_TRAP_INEXACT", 32, ""],
67
+ ["GSL_INTEG_GAUSS15", 1, "15 point Gauss-Kronrod rule"],
68
+ ["GSL_INTEG_GAUSS21", 2, "21 point Gauss-Kronrod rule"],
69
+ ["GSL_INTEG_GAUSS31", 3, "31 point Gauss-Kronrod rule"],
70
+ ["GSL_INTEG_GAUSS41", 4, "41 point Gauss-Kronrod rule"],
71
+ ["GSL_INTEG_GAUSS51", 5, "51 point Gauss-Kronrod rule"],
72
+ ["GSL_INTEG_GAUSS61", 6, "61 point Gauss-Kronrod rule"],
73
+ ["GSL_VEGAS_MODE_IMPORTANCE", 1, ""],
74
+ ["GSL_VEGAS_MODE_IMPORTANCE_ONLY", 0, ""],
75
+ ["GSL_VEGAS_MODE_STRATIFIED", -1, ""]]
@@ -0,0 +1,60 @@
1
+ require_relative "../gen/erbpp_gsl"
2
+ require "erbpp/line_number"
3
+
4
+ func_list = ErbppGsl.read_func
5
+ const_list = ErbppGsl.read_const
6
+ enum_list = ErbppGsl.read_enum
7
+
8
+ class DefSys < DefGslModule
9
+ def lookup(h)
10
+ case h
11
+ when FM(dbl, type:int); "m_Int_f_DFloat"
12
+ when FM(*[dbl]*3, type:int); "m_Int_f_DFloat_x3" # gsl_fcmp
13
+ when FM(dbl, type:dbl); "m_DFloat_f_DFloat"
14
+ when FM(*[dbl]*2, type:dbl); "m_DFloat_f_DFloat_x2"
15
+ when FM(*[dbl]*3, type:dbl); "m_DFloat_f_DFloat_x3"
16
+ when FM(int, type:dbl); "m_DFloat_f_Int"
17
+ when FM(dbl,int, type:dbl); "m_DFloat_f_DFloat_Int"
18
+ when FM(dbl,uint, type:dbl); "m_DFloat_f_DFloat_UInt"
19
+ when FM(dbl,intp, type:dbl); "m_DFloat_Int_f_DFloat" # gsl_frexp
20
+ end
21
+ end
22
+
23
+ def to_method_name(s)
24
+ s.sub(/^gsl_/,"")
25
+ end
26
+ end
27
+
28
+ DefLib.new do
29
+ set erb_dir: %w[tmpl ../gen/tmpl]
30
+ set erb_suffix: ".c"
31
+
32
+ set file_name: "gsl_sys.c"
33
+ set include_files: %w[gsl/gsl_sys.h gsl/gsl_pow_int.h gsl/gsl_math.h gsl/gsl_mode.h]
34
+ set lib_name: "sys"
35
+ set ns_var: "mGSL"
36
+
37
+ DefSys.new(self) do
38
+ set name: "sys"
39
+ set module_name: "GSL"
40
+ set module_var: "mGSL"
41
+ set full_module_name: "Numo::GSL"
42
+
43
+ func_list.each do |h|
44
+ check_func(h)
45
+ end
46
+
47
+ const_list.each do |a|
48
+ m = a[0].sub(/^GSL_/,"")
49
+ v = "DBL2NUM(#{a[0]})"
50
+ def_const(m, v, desc:a[1]||"")
51
+ end
52
+
53
+ enum_list.each do |a|
54
+ m = a[0].sub(/^GSL_/,"")
55
+ v = "INT2FIX(#{a[1]})"
56
+ def_const(m, v, desc:a[2]||"")
57
+ end
58
+ end
59
+
60
+ end.run
@@ -0,0 +1,9 @@
1
+ require_relative '../extconf_gsl.rb'
2
+
3
+ # source file to compile
4
+ srcs = %w(
5
+ gsl_sys
6
+ )
7
+ $objs = srcs.collect{|i| i+".o"}
8
+
9
+ create_makefile('numo/gsl/sys')
@@ -0,0 +1,249 @@
1
+ [{:func_name=>"gsl_isnan",
2
+ :func_type=>"int",
3
+ :args=>[["const double", "x"]],
4
+ :desc=>"This function returns 1 if x is not-a-number."},
5
+ {:func_name=>"gsl_isinf",
6
+ :func_type=>"int",
7
+ :args=>[["const double", "x"]],
8
+ :desc=>
9
+ "This function returns +1 if x is positive infinity,\n" +
10
+ "-1 if x is negative infinity and 0\n" +
11
+ "otherwise.Note that the C99 standard only requires the\n" +
12
+ "system isinf function to return a non-zero value, without the\n" +
13
+ "sign of the infinity. The implementation in some earlier versions of\n" +
14
+ "GSL used the system isinf function and may have this behavior\n" +
15
+ "on some platforms. Therefore, it is advisable to test the sign of\n" +
16
+ "x separately, if needed, rather than relying the sign of the\n" +
17
+ "return value from gsl_isinf()."},
18
+ {:func_name=>"gsl_finite",
19
+ :func_type=>"int",
20
+ :args=>[["const double", "x"]],
21
+ :desc=>
22
+ "This function returns 1 if x is a real number, and 0 if it is\n" +
23
+ "infinite or not-a-number."},
24
+ {:func_name=>"gsl_log1p",
25
+ :func_type=>"double",
26
+ :args=>[["const double", "x"]],
27
+ :desc=>
28
+ "This function computes the value of \\log(1+x) in a way that is\n" +
29
+ "accurate for small x. It provides an alternative to the BSD math\n" +
30
+ "function log1p(x)."},
31
+ {:func_name=>"gsl_expm1",
32
+ :func_type=>"double",
33
+ :args=>[["const double", "x"]],
34
+ :desc=>
35
+ "This function computes the value of \\exp(x)-1 in a way that is\n" +
36
+ "accurate for small x. It provides an alternative to the BSD math\n" +
37
+ "function expm1(x)."},
38
+ {:func_name=>"gsl_hypot",
39
+ :func_type=>"double",
40
+ :args=>[["const double", "x"], ["const double", "y"]],
41
+ :desc=>
42
+ "This function computes the value of\n" +
43
+ "$\\sqrt{x^2 + y^2}$\n" +
44
+ "\\sqrt@{x^2 + y^2@} in a way that avoids overflow. It provides an\n" +
45
+ "alternative to the BSD math function hypot(x,y)."},
46
+ {:func_name=>"gsl_hypot3",
47
+ :func_type=>"double",
48
+ :args=>[["const double", "x"], ["const double", "y"], ["const double", "z"]],
49
+ :desc=>
50
+ "This function computes the value of\n" +
51
+ "$\\sqrt{x^2 + y^2 + z^2}$\n" +
52
+ "\\sqrt@{x^2 + y^2 + z^2@} in a way that avoids overflow."},
53
+ {:func_name=>"gsl_acosh",
54
+ :func_type=>"double",
55
+ :args=>[["const double", "x"]],
56
+ :desc=>
57
+ "This function computes the value of \\arccosh(x). It provides an\n" +
58
+ "alternative to the standard math function acosh(x)."},
59
+ {:func_name=>"gsl_asinh",
60
+ :func_type=>"double",
61
+ :args=>[["const double", "x"]],
62
+ :desc=>
63
+ "This function computes the value of \\arcsinh(x). It provides an\n" +
64
+ "alternative to the standard math function asinh(x)."},
65
+ {:func_name=>"gsl_atanh",
66
+ :func_type=>"double",
67
+ :args=>[["const double", "x"]],
68
+ :desc=>
69
+ "This function computes the value of \\arctanh(x). It provides an\n" +
70
+ "alternative to the standard math function atanh(x)."},
71
+ {:func_name=>"gsl_ldexp",
72
+ :func_type=>"double",
73
+ :args=>[["double", "x"], ["int", "e"]],
74
+ :desc=>
75
+ "This function computes the value of x * 2^e. It provides an\n" +
76
+ "alternative to the standard math function ldexp(x,e)."},
77
+ {:func_name=>"gsl_frexp",
78
+ :func_type=>"double",
79
+ :args=>[["double", "x"], ["int *", "e"]],
80
+ :desc=>
81
+ "This function splits the number x into its normalized fraction\n" +
82
+ "f and exponent e, such that x = f * 2^e and\n" +
83
+ "$0.5 \\le f < 1$\n" +
84
+ "0.5 <= f < 1. The function returns f and stores the\n" +
85
+ "exponent in e. If x is zero, both f and e\n" +
86
+ "are set to zero. This function provides an alternative to the standard\n" +
87
+ "math function frexp(x, e)."},
88
+ {:func_name=>"gsl_pow_int",
89
+ :func_type=>"double",
90
+ :args=>[["double", "x"], ["int", "n"]],
91
+ :desc=>
92
+ "These routines computes the power x^n for integer n. The\n" +
93
+ "power is computed efficiently---for example, x^8 is computed as\n" +
94
+ "((x^2)^2)^2, requiring only 3 multiplications. A version of this\n" +
95
+ "function which also computes the numerical error in the result is\n" +
96
+ "available as gsl_sf_pow_int_e."},
97
+ {:func_name=>"gsl_pow_uint",
98
+ :func_type=>"double",
99
+ :args=>[["double", "x"], ["unsigned int", "n"]],
100
+ :desc=>
101
+ "These routines computes the power x^n for integer n. The\n" +
102
+ "power is computed efficiently---for example, x^8 is computed as\n" +
103
+ "((x^2)^2)^2, requiring only 3 multiplications. A version of this\n" +
104
+ "function which also computes the numerical error in the result is\n" +
105
+ "available as gsl_sf_pow_int_e."},
106
+ {:func_name=>"gsl_pow_2",
107
+ :func_type=>"double",
108
+ :args=>[["const double", "x"]],
109
+ :desc=>
110
+ "These functions can be used to compute small integer powers x^2,\n" +
111
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
112
+ "HAVE_INLINE is defined, so that use of these functions \n" +
113
+ "should be as efficient as explicitly writing the corresponding \n" +
114
+ "product expression."},
115
+ {:func_name=>"gsl_pow_3",
116
+ :func_type=>"double",
117
+ :args=>[["const double", "x"]],
118
+ :desc=>
119
+ "These functions can be used to compute small integer powers x^2,\n" +
120
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
121
+ "HAVE_INLINE is defined, so that use of these functions \n" +
122
+ "should be as efficient as explicitly writing the corresponding \n" +
123
+ "product expression."},
124
+ {:func_name=>"gsl_pow_4",
125
+ :func_type=>"double",
126
+ :args=>[["const double", "x"]],
127
+ :desc=>
128
+ "These functions can be used to compute small integer powers x^2,\n" +
129
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
130
+ "HAVE_INLINE is defined, so that use of these functions \n" +
131
+ "should be as efficient as explicitly writing the corresponding \n" +
132
+ "product expression."},
133
+ {:func_name=>"gsl_pow_5",
134
+ :func_type=>"double",
135
+ :args=>[["const double", "x"]],
136
+ :desc=>
137
+ "These functions can be used to compute small integer powers x^2,\n" +
138
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
139
+ "HAVE_INLINE is defined, so that use of these functions \n" +
140
+ "should be as efficient as explicitly writing the corresponding \n" +
141
+ "product expression."},
142
+ {:func_name=>"gsl_pow_6",
143
+ :func_type=>"double",
144
+ :args=>[["const double", "x"]],
145
+ :desc=>
146
+ "These functions can be used to compute small integer powers x^2,\n" +
147
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
148
+ "HAVE_INLINE is defined, so that use of these functions \n" +
149
+ "should be as efficient as explicitly writing the corresponding \n" +
150
+ "product expression."},
151
+ {:func_name=>"gsl_pow_7",
152
+ :func_type=>"double",
153
+ :args=>[["const double", "x"]],
154
+ :desc=>
155
+ "These functions can be used to compute small integer powers x^2,\n" +
156
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
157
+ "HAVE_INLINE is defined, so that use of these functions \n" +
158
+ "should be as efficient as explicitly writing the corresponding \n" +
159
+ "product expression."},
160
+ {:func_name=>"gsl_pow_8",
161
+ :func_type=>"double",
162
+ :args=>[["const double", "x"]],
163
+ :desc=>
164
+ "These functions can be used to compute small integer powers x^2,\n" +
165
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
166
+ "HAVE_INLINE is defined, so that use of these functions \n" +
167
+ "should be as efficient as explicitly writing the corresponding \n" +
168
+ "product expression."},
169
+ {:func_name=>"gsl_pow_9",
170
+ :func_type=>"double",
171
+ :args=>[["const double", "x"]],
172
+ :desc=>
173
+ "These functions can be used to compute small integer powers x^2,\n" +
174
+ "x^3, etc. efficiently. The functions will be inlined when \n" +
175
+ "HAVE_INLINE is defined, so that use of these functions \n" +
176
+ "should be as efficient as explicitly writing the corresponding \n" +
177
+ "product expression."},
178
+ {:func_name=>"GSL_MAX_DBL",
179
+ :func_type=>"extern inline double",
180
+ :args=>[["double", "a"], ["double", "b"]],
181
+ :desc=>
182
+ "This function returns the maximum of the double precision numbers\n" +
183
+ "a and b using an inline function. The use of a function\n" +
184
+ "allows for type checking of the arguments as an extra safety feature. On\n" +
185
+ "platforms where inline functions are not available the macro\n" +
186
+ "GSL_MAX will be automatically substituted."},
187
+ {:func_name=>"GSL_MIN_DBL",
188
+ :func_type=>"extern inline double",
189
+ :args=>[["double", "a"], ["double", "b"]],
190
+ :desc=>
191
+ "This function returns the minimum of the double precision numbers\n" +
192
+ "a and b using an inline function. The use of a function\n" +
193
+ "allows for type checking of the arguments as an extra safety feature. On\n" +
194
+ "platforms where inline functions are not available the macro\n" +
195
+ "GSL_MIN will be automatically substituted."},
196
+ {:func_name=>"GSL_MAX_INT",
197
+ :func_type=>"extern inline int",
198
+ :args=>[["int", "a"], ["int", "b"]],
199
+ :desc=>
200
+ "These functions return the maximum or minimum of the integers a\n" +
201
+ "and b using an inline function. On platforms where inline\n" +
202
+ "functions are not available the macros GSL_MAX or GSL_MIN\n" +
203
+ "will be automatically substituted."},
204
+ {:func_name=>"GSL_MIN_INT",
205
+ :func_type=>"extern inline int",
206
+ :args=>[["int", "a"], ["int", "b"]],
207
+ :desc=>
208
+ "These functions return the maximum or minimum of the integers a\n" +
209
+ "and b using an inline function. On platforms where inline\n" +
210
+ "functions are not available the macros GSL_MAX or GSL_MIN\n" +
211
+ "will be automatically substituted."},
212
+ {:func_name=>"GSL_MAX_LDBL",
213
+ :func_type=>"extern inline long double",
214
+ :args=>[["long double", "a"], ["long double", "b"]],
215
+ :desc=>
216
+ "These functions return the maximum or minimum of the long doubles a\n" +
217
+ "and b using an inline function. On platforms where inline\n" +
218
+ "functions are not available the macros GSL_MAX or GSL_MIN\n" +
219
+ "will be automatically substituted."},
220
+ {:func_name=>"GSL_MIN_LDBL",
221
+ :func_type=>"extern inline long double",
222
+ :args=>[["long double", "a"], ["long double", "b"]],
223
+ :desc=>
224
+ "These functions return the maximum or minimum of the long doubles a\n" +
225
+ "and b using an inline function. On platforms where inline\n" +
226
+ "functions are not available the macros GSL_MAX or GSL_MIN\n" +
227
+ "will be automatically substituted."},
228
+ {:func_name=>"gsl_fcmp",
229
+ :func_type=>"int",
230
+ :args=>[["double", "x"], ["double", "y"], ["double", "epsilon"]],
231
+ :desc=>
232
+ "This function determines whether x and y are approximately\n" +
233
+ "equal to a relative accuracy epsilon.\n" +
234
+ "\n" +
235
+ "The relative accuracy is measured using an interval of size 2\n" +
236
+ "\\delta, where \\delta = 2^k \\epsilon and k is the\n" +
237
+ "maximum base-2 exponent of x and y as computed by the\n" +
238
+ "function frexp. \n" +
239
+ "\n" +
240
+ "If x and y lie within this interval, they are considered\n" +
241
+ "approximately equal and the function returns 0. Otherwise if x <\n" +
242
+ "y, the function returns -1, or if x > y, the function returns\n" +
243
+ "+1.\n" +
244
+ "\n" +
245
+ "Note that x and y are compared to relative accuracy, so\n" +
246
+ "this function is not suitable for testing whether a value is\n" +
247
+ "approximately zero. \n" +
248
+ "\n" +
249
+ "The implementation is based on the package fcmp by T.C. Belding."}]