diff --git a/Manticore/Num/ContinuedFraction.pm b/Manticore/Num/ContinuedFraction.pm index 5f6f039..f6dde0b 100644 --- a/Manticore/Num/ContinuedFraction.pm +++ b/Manticore/Num/ContinuedFraction.pm @@ -32,10 +32,30 @@ sub child { my $self = shift; if(not $self->{c}) { my ($a, $r) = @{$self}{qw(a r)}; + if(0 == $r) { + return undef + } my $c = Manticore::Num::ContinuedFraction->new(1/$r); $self->{c} = $c; } return $self->{c} } +sub firstk { + my ($self, $k) = @_; + if($k <= 0) { + return [] + } else { + my $c = $self->child(); + return [$self->{a}] unless defined $c; + my $l = $c->firstk($k-1); + unshift @$l, $self->{a}; + return $l + } +} + + + + + 1; diff --git a/Manticore/Num/Trig.pm b/Manticore/Num/Trig.pm new file mode 100644 index 0000000..1135f00 --- /dev/null +++ b/Manticore/Num/Trig.pm @@ -0,0 +1,34 @@ +package Manticore::Num::Trig; + +use strict; +use warnings; + +# 1/0! - x^2/2! + x^4/4! - x^6/6! +sub proxCos { + my ($steps, $x) = @_; + my $mxsq = -$x*$x; + my $sum = 0; + my $fa = 1; + for(1..$steps) { + my $step2 = $_ * 2; + $sum += $fa; + $fa *= $mxsq/($step2*($step2-1)) + } + return $sum +} + +# x/1! - x^3/3! + x^5/5! - x^7/7! +sub proxSin { + my ($steps, $x) = @_; + my $mxsq = -$x*$x; + my $sum = 0; + my $fa = $x; + for(1..$steps) { + my $step2 = $_ * 2; + $sum += $fa; + $fa *= $mxsq/($step2*($step2+1)) + } + return $sum +} + +1; diff --git a/tests/testCf.pl b/tests/testCf.pl index 97a4117..cd5e7c6 100755 --- a/tests/testCf.pl +++ b/tests/testCf.pl @@ -12,9 +12,13 @@ BEGIN { use Manticore::Num::ContinuedFraction; -my $pi = Manticore::Num::ContinuedFraction->new(pi); +my $pi = Manticore::Num::ContinuedFraction->new(7.25); -print $pi->child(); +#print $pi->child(); +# +#print Data::Dumper::Dumper($pi); -print Data::Dumper::Dumper($pi); +my $c = $pi->firstk(25); + +print "[[ @$c ]]\n";