FC2ブログ

# 余割(近似) Cosecant Approximation
# 引数 値 ($x)
# 戻り値 余割(ラジアン) ($CosecantApproximation)
sub COSECANT{
my ($x) = @_;
my $CosecantApproximation = 0;
my $Sum = 0;
my $BernoulliNumber = 1;
my $X = abs($x);
my $Sign = 0;
my $Num1 = 0;
my $Num2 = 0;
my $Factorial = 1;
my $Pi = atan2(1, 1) * 4;
my $Expansion = 20;

# 値の確認
if($X == 0){
return 0;
}

# 180度以上
if($X >= $Pi){
$X = $X - (int($X / $Pi) * $Pi);
}

for(my $i = 0; $i <= $Expansion; $i++){
# 符号
$Sign = (($i % 2) == 1 ? 1: -1);
# 分子
$Num1 = 2 * ((2 ** ((2 * $i) - 1)) - 1);
$Num2 = $X ** ((2 * $i) - 1);
$BernoulliNumber = &BERNOULLINUMBER(2 * $i);

if($i != 0){
# 分母 階乗
for(my $j = (2 * $i); $j > (2 * ($i - 1)); $j--){
$Factorial = $Factorial * $j;
}
}

# 余割(近似) Cosecant
$Sum += $Sign * (($Num1 * $Num2 * $BernoulliNumber) / $Factorial);
}

# 符号を負
if((($x > 0) && ((int($x / $Pi) % 2) == 1)) || (($x < 0) && ((int($x / $Pi) % 2) == 0))){
$Sum = -$Sum;
}

# 余割(近似) Cosecant
$CosecantApproximation = $Sum;

return $CosecantApproximation;
}

# ベルヌーイ数 Bernoulli Number
# 引数 整数 ($n)
# 戻り値 ベルヌーイ数 ($BernoulliNumber)
sub BERNOULLINUMBER{
my ($n) = @_;
my $BernoulliNumber = 1;
my @Bernoulli = (1);
my $Combination = 0;
my $BinomialCoefficient = 0;
my $N = int($n);
my $Sum = 0;

# 整数の確認
if($N < 0){
return 0;
}

# 奇数番目のベルヌーイ数は1番目を除けば全て0
if(($N != 1) && (($N % 2) == 1)){
# ベルヌーイ数 Bernoulli Number
$BernoulliNumber = 0;

return $BernoulliNumber;
}

# 計算
for(my $i = 1; $i <= $N; $i++){
# 奇数番目のベルヌーイ数は1番目を除けば全て0
if(($i != 1) && (($i % 2) == 1)){
$Bernoulli[$i] = 0;
next;
}

# 二項係数 Binomial Coefficient
$Combination = ($i + 1);
$Sum = (1 * $Bernoulli[0]);

for(my $j = 1; $j <= ($i - 1); $j++){
# 二項係数 Binomial Coefficient
$Combination = $Combination / $j;
$BinomialCoefficient = $Combination;
$Combination = $Combination * (($i + 1) - $j);

$Sum += $BinomialCoefficient * $Bernoulli[$j];
}

$Bernoulli[$i] = -(1 / ($i + 1)) * $Sum;
}

# ベルヌーイ数 Bernoulli Number
$BernoulliNumber = $Bernoulli[$N];

return $BernoulliNumber;
}


参考URL
Cosecant -- from Wolfram MathWorld
Trigonometric functions - Wikipedia, the free encyclopedia
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS