FC2ブログ

# 正割(近似) Secant Approximation
# 引数 値 ($x)
# 戻り値 正割(ラジアン) ($SecantApproximation)
sub SECANT{
my ($x) = @_;
my $SecantApproximation = 0;
my $Sum = 0;
my $ZigZagNumber = 0;
my @ZigZag = ();
my $X = abs($x);
my $Num = 0;
my $Factorial = 1;
my $Pi = atan2(1, 1) * 4;
my $Pi2 = $Pi / 2;
my $Expansion = 20;

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

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

for(my $i = 0; $i <= $Expansion; $i++){
# 分子
$Num = $X ** (2 * $i);
@ZigZag = &ZIGZAGNUMBER((2 * $i));
$ZigZagNumber = $ZigZag[(2 * $i)];

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

$Sum += (($Num * $ZigZagNumber) / $Factorial);
}

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

# 正割(近似) Secant
$SecantApproximation = $Sum;

return $SecantApproximation;
}

# ジグザグ数 ZigZag Number
# 引数 整数 ($n)
# 戻り値 ジグザグ数 ($ZigZagNumber)
sub ZIGZAGNUMBER{
my ($n) = @_;
my @ZigZagNumber = (1);
my @ZigZag = (1);
my $PrevZigZag = 0;
my $Temp = 0;
my $N = int($n);

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

# 計算
for(my $i = 1; $i <= $N; $i++){
$PrevZigZag = 0;
# 最後尾
$ZigZag[$i] = 0;

if(($i % 2) == 1){
# 奇数 タンジェント数 Zag Number
for(my $j = 0; $j <= $i; $j++){
$Temp = $ZigZag[$j] + $PrevZigZag;

# オイラー数で使用
$ZigZag[$j] = $PrevZigZag;
# 次回使用する値
$PrevZigZag = $Temp;
}
}else {
# 遇数 オイラー数 Zig Number
for(my $j = $i - 1; $j >= 0; $j--){
$Temp = $ZigZag[$j] + $PrevZigZag;

# タンジェント数で使用
$ZigZag[$j] = $Temp;
# 次回使用する値
$PrevZigZag = $Temp;
}
}

# ジグザグ数 ZigZag Number
$ZigZagNumber[$i] = $Temp;
}

return @ZigZagNumber;
}


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

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

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

検索フォーム


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