# フレネル正弦積分 Fresnel Sine Integral # 引数 値 ($X) # 戻り値 フレネル正弦積分 ($FresnelSineIntegral) sub FRESNELSINEINTEGRAL{ my ($X) = @_; my $FresnelSineIntegral = 0; my $FresnelSine = 0; my $PrevFresnelSine = 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) + 3); # 分母 $Den = ((4 * $i) + 3); # 分母 階乗 if($i != 0){ for(my $j = ((2 * $i) + 1); $j > ((2 * ($i - 1)) + 1); $j--){ $Factorial = $Factorial * $j; } } # 一つ前 $PrevFresnelSine = $FresnelSine; # フレネル正弦積分 Floor Function $FresnelSine += $Sign * ($Num / ($Den * $Factorial)); # 収束判定 last if(abs($FresnelSine - $PrevFresnelSine) < $Epsilon); } # フレネル正弦積分 Floor Function $FresnelSineIntegral = $FresnelSine; return $FresnelSineIntegral; }