FC2ブログ
最初
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/Tangent1.txt

修正1 5/20
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/Tangent2.txt

修正2 5/20

# 正接(近似) Tangent Approximation
# 引数 値 ($x)
# 戻り値 正接(ラジアン) ($TangentApproximation)
sub TANGENT{
my ($x) = @_;
my $TangentApproximation = 0;
my $ZigZagNumber = 0;
my @ZigZag = ();
my $Sum = 0;
my $X = abs($x);
my $Temp = 0;
my $Factorial = 1;
my $PowerX = 0;
my $Pi = atan2(1, 1) * 4;
my $Pi2 = $Pi / 2;
my $Expansion = 20;

if(($x < -$Pi2) || ($Pi2 < $x)){
if((int($X / $Pi2) % 2) == 0){
# 90度未満
$X = ($X - (int($X / $Pi2) * $Pi2));
}else {
# 90度以上
$X = ($X - (int($X / $Pi2) * $Pi2)) - $Pi2;
}
}

for(my $i = 0; $i <= $Expansion; $i++){
# 累乗
$PowerX = $X ** ((2 * $i) + 1);
# 分子 ジグザグ数
@ZigZag = &ZIGZAGNUMBER((2 * $i) + 1);
$ZigZagNumber = $ZigZag[(2 * $i) + 1];

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

# 正接(近似) Tangent
$Sum += ($ZigZagNumber / $Factorial) * $PowerX;
}

# 符号を負
$Sum = -$Sum if($x < 0);

# 正接(近似) Tangent
$TangentApproximation = $Sum;

return $TangentApproximation;
}

# ジグザグ数 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;
}


SINE/COSINE
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/Tangent.txt

参考URL
Trigonometric functions - Wikipedia, the free encyclopedia
Alternating permutation - Wikipedia, the free encyclopedia

一言
$Xが$Pi2付近だとsin/cosと値が異なる

修正1 5/20
誤差ではなく項で打ち切り

修正2 5/20
ジグザグ数を関数にする
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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