# フレネル余弦積分 Fresnel Cosine Integral # 引数 値 ($X) # 戻り値 フレネル余弦積分 ($FresnelCosineIntegral) sub FRESNELCOSINEINTEGRAL{ my ($X) = @_; my $FresnelCosineIntegral = 0; my $FresnelCosine = 0; my $PrevFresnelCosine = 0; my $Sign = 0; my $Num = 0; my $Den = 0; my $Factorial = 1; my $Limit = 100; my $Epsilon = 1.0e-10; for(my $i = 0; $i < $Limit; $i++){ # 符号 $Sign = (($i % 2) == 0 ? 1: -1); # 分子 $Num = $X ** ((4 * $i) + 1); # 分母 $Den = ((4 * $i) + 1); # 分母 階乗 if($i != 0){ for(my $j = (2 * $i); $j > (2 * ($i - 1)); $j--){ $Factorial = $Factorial * $j; } } # 一つ前 $PrevFresnelCosine = $FresnelCosine; # フレネル余弦積分 Fresnel Cosine Integral $FresnelCosine += $Sign * ($Num / ($Den * $Factorial)); # 収束判定 last if(abs($FresnelCosine - $PrevFresnelCosine) < $Epsilon); } # フレネル余弦積分 Floor Function $FresnelCosineIntegral = $FresnelCosine; return $FresnelCosineIntegral; }