File Coverage

blib/lib/Math/Cephes.pm
Criterion Covered Total %
statement 48 54 88.8
branch 10 16 62.5
condition 12 23 52.1
subroutine 9 14 64.2
pod 0 5 0.0
total 79 112 70.5


line stmt bran cond sub pod time code
1             # This file was automatically generated by SWIG
2             package Math::Cephes;
3 17     17   49276 use strict;
  17         20  
  17         394  
4 17     17   56 use warnings;
  17         18  
  17         390  
5 17     17   43 use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS @ISA);
  17         18  
  17         29500  
6              
7             require Exporter;
8             *import = \&Exporter::import;
9             require DynaLoader;
10             @ISA = qw( DynaLoader);
11             package Math::Cephesc;
12             bootstrap Math::Cephes;
13             package Math::Cephes;
14              
15             my @constants = qw($PI $PIO2 $PIO4 $SQRT2 $MACHEP $MAXLOG $MINLOG $MAXNUM
16             $SQ2OPI $LOGE2 $LOGSQ2 $THPIO4 $TWOOPI $SQRTH $LOG2E );
17             my @trigs = qw(asin acos atan atan2 sin cos tan cot hypot
18             tandg cotdg sindg cosdg radian cosm1);
19             my @hypers = qw(acosh asinh atanh sinh cosh tanh);
20             my @explog = qw(log1p expm1 exp exp10 exp2 log log10 log2 expxx);
21             my @cmplx = qw(clog cexp csin ccos ctan ccot casin
22             cacos catan cadd csub cmul cdiv cmov cneg cabs csqrt
23             csinh ccosh ctanh cpow casinh cacosh catanh new_cmplx);
24             my @utils = qw(ceil floor frexp ldexp fabs
25             round sqrt lrand pow powi drand lsqrt fac cbrt);
26             my @bessels = qw(i0 i0e i1 i1e iv j0 j1 jn jv k0 k1 kn yn yv k0e k1e y0 y1);
27             my @dists = qw(bdtr bdtrc bdtri btdtr chdtr chdtrc chdtri
28             fdtr fdtrc fdtri gdtr gdtrc nbdtr nbdtrc nbdtri
29             ndtr ndtri pdtr pdtrc pdtri stdtr stdtri);
30             my @gammas = qw(gamma igam igamc igami psi fac rgamma lgam);
31             my @betas = qw(beta lbeta incbet incbi lbeta);
32             my @elliptics = qw(ellie ellik ellpe ellpj ellpk);
33             my @hypergeometrics = qw(onef2 threef0 hyp2f1 hyperg hyp2f0);
34             my @misc = qw(zeta zetac airy dawsn fresnl sici shichi expn spence ei
35             erfc erf struve plancki simpson bernum polylog vecang);
36             my @fract = qw(radd rsub rmul rdiv euclid);
37              
38             %EXPORT_TAGS = ('constants' => [@constants],
39             'utils' => [@utils],
40             'trigs' => [@trigs],
41             'hypers' => [@hypers],
42             'explog' => [@explog],
43             'cmplx' => [@cmplx],
44             'bessels' => [@bessels],
45             'gammas' => [@gammas],
46             'dists' => [@dists],
47             'betas' => [@betas],
48             'elliptics' => [@elliptics],
49             'hypergeometrics' => [@hypergeometrics],
50             'fract' => [@fract],
51             'misc' => [@misc],
52             'all' => [@constants, @utils, @trigs, @hypers,
53             @explog, @bessels, @gammas, @betas, @elliptics,
54             @hypergeometrics, @misc, @dists],
55             );
56              
57             @EXPORT_OK = (@constants, @utils, @trigs, @hypers,
58             @explog, @bessels, @gammas, @betas, @elliptics,
59             @hypergeometrics, @misc, @dists, @fract, @cmplx);
60              
61             $VERSION = '0.5305';
62             #Math::Cephes->bootstrap($VERSION);
63             #var_Math__Cephes_init();
64              
65             sub simpson {
66 1     1 0 3613 my ($r, $a, $b, $abs, $rel, $nmax) = @_;
67 1 50       6 die "Must supply a CODE reference" unless ref($r) eq 'CODE';
68 1 50 33     12 die "Must supply start and end points($a and $b)"
69             unless (defined $a and defined $b);
70 1   50     3 $abs ||= 1e-06;
71 1   50     2 $rel ||= 1e-06;
72 1   50     3 $nmax ||= 256;
73 1 50       4 $nmax = 2 if $nmax < 2;
74 1         1 my $sumold = 0;
75 1         4 for (my $n=2; $n<=$nmax; $n++) {
76 24         16 my $count = 0;
77 24         15 my $x = $a;
78 24         12 my $sum = 0;
79 24         25 my $h = ($b - $a) / $n / 8;
80 24         20 my $f = [];
81 24         35 for($count=0; $count <= 8*$n; $count++, $x+=$h) {
82 2616         7799 $f->[$count] = &$r($x);
83             }
84 24         352 $sum = Math::Cephes::simpsn_wrap($f, $count-1, $h);
85 24         25 my $test = abs($sum - $sumold);
86 24 100 66     81 return $sum if ($test < $abs or abs($test/$sum) < $rel);
87 23         66 $sumold = $sum;
88             }
89 0         0 warn("Math::Cephes::simpson: Maximum number $nmax of iterations reached");
90 0         0 return undef;
91             }
92              
93             sub bernum {
94 2     2 0 580 my $i = shift;
95 2 50 66     10 die "Cannot exceed i=30" if (defined $i and $i > 30);
96 2         18 my $num = [split //, 0 x 30 ];
97 2         15 my $den = [split //, 0 x 30 ];
98 2         602 Math::Cephes::bernum_wrap($num, $den);
99 2 100       12 return defined $i ? (int($num->[$i]), int($den->[$i])) : ($num, $den);
100             }
101              
102             sub expxx {
103 2     2 0 1893 my $x = shift;
104 2   100     9 my $n = shift || 1;
105 2         14 return Math::Cephes::expx2($x, $n);
106             }
107              
108             sub vecang {
109 1     1 0 537 my ($a, $b) = @_;
110 1 50 33     10 die "Must supply array references"
111             unless (ref($a) eq 'ARRAY' and ref($b) eq 'ARRAY');
112 1 50 33     6 die "Vectors must be of dimension 3"
113             unless (scalar @$a == 3 and scalar @$b == 3);
114 1         23 return Math::Cephes::arcdot($a, $b);
115             }
116              
117             # ---------- BASE METHODS -------------
118              
119             package Math::Cephes;
120              
121             sub TIEHASH {
122 0     0   0 my ($classname,$obj) = @_;
123 0         0 return bless $obj, $classname;
124             }
125              
126       0     sub CLEAR { }
127              
128       0     sub FIRSTKEY { }
129              
130       0     sub NEXTKEY { }
131              
132             sub FETCH {
133 244     244   313 my ($self,$field) = @_;
134 244         234 my $member_func = "swig_${field}_get";
135 244         1204 $self->$member_func();
136             }
137              
138             sub STORE {
139 6     6   8 my ($self,$field,$newval) = @_;
140 6         9 my $member_func = "swig_${field}_set";
141 6         22 $self->$member_func($newval);
142             }
143              
144             sub this {
145 0     0 0   my $ptr = shift;
146 0           return tied(%$ptr);
147             }
148              
149              
150             # ------- FUNCTION WRAPPERS --------
151              
152             package Math::Cephes;
153              
154             *acosh = *Math::Cephesc::md_acosh;
155             *airy = *Math::Cephesc::airy;
156             *asin = *Math::Cephesc::md_asin;
157             *acos = *Math::Cephesc::md_acos;
158             *asinh = *Math::Cephesc::md_asinh;
159             *atan = *Math::Cephesc::md_atan;
160             *atan2 = *Math::Cephesc::md_atan2;
161             *atanh = *Math::Cephesc::md_atanh;
162             *bdtrc = *Math::Cephesc::bdtrc;
163             *bdtr = *Math::Cephesc::bdtr;
164             *bdtri = *Math::Cephesc::bdtri;
165             *beta = *Math::Cephesc::beta;
166             *lbeta = *Math::Cephesc::lbeta;
167             *btdtr = *Math::Cephesc::btdtr;
168             *cbrt = *Math::Cephesc::md_cbrt;
169             *chbevl = *Math::Cephesc::chbevl;
170             *chdtrc = *Math::Cephesc::chdtrc;
171             *chdtr = *Math::Cephesc::chdtr;
172             *chdtri = *Math::Cephesc::chdtri;
173             *clog = *Math::Cephesc::md_clog;
174             *cexp = *Math::Cephesc::md_cexp;
175             *csin = *Math::Cephesc::md_csin;
176             *ccos = *Math::Cephesc::md_ccos;
177             *ctan = *Math::Cephesc::md_ctan;
178             *ccot = *Math::Cephesc::ccot;
179             *casin = *Math::Cephesc::md_casin;
180             *cacos = *Math::Cephesc::md_cacos;
181             *catan = *Math::Cephesc::md_catan;
182             *csinh = *Math::Cephesc::md_csinh;
183             *casinh = *Math::Cephesc::md_casinh;
184             *ccosh = *Math::Cephesc::md_ccosh;
185             *cacosh = *Math::Cephesc::md_cacosh;
186             *ctanh = *Math::Cephesc::md_ctanh;
187             *catanh = *Math::Cephesc::md_catanh;
188             *cpow = *Math::Cephesc::md_cpow;
189             *radd = *Math::Cephesc::radd;
190             *rsub = *Math::Cephesc::rsub;
191             *rmul = *Math::Cephesc::rmul;
192             *rdiv = *Math::Cephesc::rdiv;
193             *euclid = *Math::Cephesc::euclid;
194             *cadd = *Math::Cephesc::cadd;
195             *csub = *Math::Cephesc::csub;
196             *cmul = *Math::Cephesc::cmul;
197             *cdiv = *Math::Cephesc::cdiv;
198             *cmov = *Math::Cephesc::cmov;
199             *cneg = *Math::Cephesc::cneg;
200             *cabs = *Math::Cephesc::md_cabs;
201             *csqrt = *Math::Cephesc::md_csqrt;
202             *hypot = *Math::Cephesc::md_hypot;
203             *cosh = *Math::Cephesc::md_cosh;
204             *dawsn = *Math::Cephesc::dawsn;
205             *ellie = *Math::Cephesc::ellie;
206             *ellik = *Math::Cephesc::ellik;
207             *ellpe = *Math::Cephesc::ellpe;
208             *ellpj = *Math::Cephesc::ellpj;
209             *ellpk = *Math::Cephesc::ellpk;
210             *exp = *Math::Cephesc::md_exp;
211             *exp10 = *Math::Cephesc::md_exp10;
212             *exp2 = *Math::Cephesc::md_exp2;
213             *expn = *Math::Cephesc::md_expn;
214             *ei = *Math::Cephesc::ei;
215             *fabs = *Math::Cephesc::md_fabs;
216             *fac = *Math::Cephesc::fac;
217             *fdtrc = *Math::Cephesc::fdtrc;
218             *fdtr = *Math::Cephesc::fdtr;
219             *fdtri = *Math::Cephesc::fdtri;
220             *ceil = *Math::Cephesc::md_ceil;
221             *floor = *Math::Cephesc::md_floor;
222             *frexp = *Math::Cephesc::md_frexp;
223             *ldexp = *Math::Cephesc::md_ldexp;
224             *fresnl = *Math::Cephesc::fresnl;
225             *gamma = *Math::Cephesc::md_gamma;
226             *lgam = *Math::Cephesc::lgam;
227             *gdtr = *Math::Cephesc::gdtr;
228             *gdtrc = *Math::Cephesc::gdtrc;
229             *hyp2f1 = *Math::Cephesc::hyp2f1;
230             *hyperg = *Math::Cephesc::hyperg;
231             *hyp2f0 = *Math::Cephesc::hyp2f0;
232             *i0 = *Math::Cephesc::i0;
233             *i0e = *Math::Cephesc::i0e;
234             *i1 = *Math::Cephesc::i1;
235             *i1e = *Math::Cephesc::i1e;
236             *igamc = *Math::Cephesc::igamc;
237             *igam = *Math::Cephesc::igam;
238             *igami = *Math::Cephesc::igami;
239             *incbet = *Math::Cephesc::incbet;
240             *incbi = *Math::Cephesc::incbi;
241             *iv = *Math::Cephesc::iv;
242             *j0 = *Math::Cephesc::md_j0;
243             *y0 = *Math::Cephesc::md_y0;
244             *j1 = *Math::Cephesc::md_j1;
245             *y1 = *Math::Cephesc::md_y1;
246             *jn = *Math::Cephesc::md_jn;
247             *jv = *Math::Cephesc::jv;
248             *k0 = *Math::Cephesc::k0;
249             *k0e = *Math::Cephesc::k0e;
250             *k1 = *Math::Cephesc::k1;
251             *k1e = *Math::Cephesc::k1e;
252             *kn = *Math::Cephesc::kn;
253             *log = *Math::Cephesc::md_log;
254             *log10 = *Math::Cephesc::md_log10;
255             *log2 = *Math::Cephesc::md_log2;
256             *lrand = *Math::Cephesc::lrand;
257             *lsqrt = *Math::Cephesc::lsqrt;
258             *mtherr = *Math::Cephesc::mtherr;
259             *new_cmplx = \&Math::Cephesc::new_cmplx;
260             *polevl = *Math::Cephesc::polevl;
261             *p1evl = *Math::Cephesc::p1evl;
262             *nbdtrc = *Math::Cephesc::nbdtrc;
263             *nbdtr = *Math::Cephesc::nbdtr;
264             *nbdtri = *Math::Cephesc::nbdtri;
265             *ndtr = *Math::Cephesc::ndtr;
266             *erfc = *Math::Cephesc::md_erfc;
267             *erf = *Math::Cephesc::md_erf;
268             *ndtri = *Math::Cephesc::ndtri;
269             *pdtrc = *Math::Cephesc::pdtrc;
270             *pdtr = *Math::Cephesc::pdtr;
271             *pdtri = *Math::Cephesc::pdtri;
272             *pow = *Math::Cephesc::md_pow;
273             *powi = *Math::Cephesc::md_powi;
274             *psi = *Math::Cephesc::psi;
275             *rgamma = *Math::Cephesc::rgamma;
276             *round = *Math::Cephesc::md_round;
277             *shichi = *Math::Cephesc::shichi;
278             *sici = *Math::Cephesc::sici;
279             *sin = *Math::Cephesc::md_sin;
280             *cos = *Math::Cephesc::md_cos;
281             *radian = *Math::Cephesc::radian;
282             *sindg = *Math::Cephesc::md_sindg;
283             *cosdg = *Math::Cephesc::cosdg;
284             *sinh = *Math::Cephesc::md_sinh;
285             *spence = *Math::Cephesc::spence;
286             *sqrt = *Math::Cephesc::sqrt;
287             *stdtr = *Math::Cephesc::stdtr;
288             *stdtri = *Math::Cephesc::stdtri;
289             *onef2 = *Math::Cephesc::onef2;
290             *threef0 = *Math::Cephesc::threef0;
291             *struve = *Math::Cephesc::struve;
292             *tan = *Math::Cephesc::md_tan;
293             *cot = *Math::Cephesc::cot;
294             *tandg = *Math::Cephesc::tandg;
295             *cotdg = *Math::Cephesc::cotdg;
296             *tanh = *Math::Cephesc::md_tanh;
297             *log1p = *Math::Cephesc::md_log1p;
298             *expm1 = *Math::Cephesc::expm1;
299             *cosm1 = *Math::Cephesc::cosm1;
300             *yn = *Math::Cephesc::md_yn;
301             *yv = *Math::Cephesc::yv;
302             *zeta = *Math::Cephesc::zeta;
303             *zetac = *Math::Cephesc::zetac;
304             *drand = *Math::Cephesc::drand;
305             *plancki = *Math::Cephesc::plancki;
306             *polini = *Math::Cephesc::polini;
307             *polmul = *Math::Cephesc::polmul;
308             *poldiv = *Math::Cephesc::poldiv;
309             *poladd = *Math::Cephesc::poladd;
310             *polsub = *Math::Cephesc::polsub;
311             *polsbt = *Math::Cephesc::polsbt;
312             *poleva = *Math::Cephesc::poleva;
313             *polatn = *Math::Cephesc::polatn;
314             *polsqt = *Math::Cephesc::polsqt;
315             *polsin = *Math::Cephesc::polsin;
316             *polcos = *Math::Cephesc::polcos;
317             *polrt_wrap = *Math::Cephesc::polrt_wrap;
318             *cpmul_wrap = *Math::Cephesc::cpmul_wrap;
319             *fpolini = *Math::Cephesc::fpolini;
320             *fpolmul_wrap = *Math::Cephesc::fpolmul_wrap;
321             *fpoldiv_wrap = *Math::Cephesc::fpoldiv_wrap;
322             *fpoladd_wrap = *Math::Cephesc::fpoladd_wrap;
323             *fpolsub_wrap = *Math::Cephesc::fpolsub_wrap;
324             *fpolsbt_wrap = *Math::Cephesc::fpolsbt_wrap;
325             *fpoleva_wrap = *Math::Cephesc::fpoleva_wrap;
326             *bernum_wrap = *Math::Cephesc::bernum_wrap;
327             *simpsn_wrap = *Math::Cephesc::simpsn_wrap;
328             *minv = *Math::Cephesc::minv;
329             *mtransp = *Math::Cephesc::mtransp;
330             *eigens = *Math::Cephesc::eigens;
331             *simq = *Math::Cephesc::simq;
332             *polylog = *Math::Cephesc::polylog;
333             *arcdot = *Math::Cephesc::arcdot;
334             *expx2 = *Math::Cephesc::expx2;
335              
336              
337             # ------- VARIABLE STUBS --------
338              
339             package Math::Cephes;
340              
341             *MACHEP = *Math::Cephesc::MACHEP;
342             *MAXLOG = *Math::Cephesc::MAXLOG;
343             *MINLOG = *Math::Cephesc::MINLOG;
344             *MAXNUM = *Math::Cephesc::MAXNUM;
345             *PI = *Math::Cephesc::PI;
346             *PIO2 = *Math::Cephesc::PIO2;
347             *PIO4 = *Math::Cephesc::PIO4;
348             *SQRT2 = *Math::Cephesc::SQRT2;
349             *SQRTH = *Math::Cephesc::SQRTH;
350             *LOG2E = *Math::Cephesc::LOG2E;
351             *SQ2OPI = *Math::Cephesc::SQ2OPI;
352             *LOGE2 = *Math::Cephesc::LOGE2;
353             *LOGSQ2 = *Math::Cephesc::LOGSQ2;
354             *THPIO4 = *Math::Cephesc::THPIO4;
355             *TWOOPI = *Math::Cephesc::TWOOPI;
356              
357             require Math::Cephes::Complex;
358              
359             1;
360              
361             __END__