sin.cef


#!/usr/local/bin/clip
#\!- <val>
:float \16
:rad
:angle 0 # この関数は、第一パラメータ(@0)に角度をとります。

:define PI 3.1415926535897932384626433832795
:define N 19 # 奇数
:define D 4.4544551033807686783083602485579e\-6

#
# tan x の素
#
func ur_tan
        :rad
        :param 1 1

        @1 = int (@0 / (PI / 2) + (@0 >= 0 ? 0.5 \-0.5))
        @0 = [+](@0 - (3217.0 / 2048) * @1) + D * @1
        @x = @0 * @0; @t = 0
        for @i = N; @i >= 3; @i -= 2; @t = @x / (@i - @t); next
        return @0 / (1 - @t)
endfunc

#
# sin x
#
@t = ur_tan (@0 / 2) @k
@t = 2 * @t / (1 + @t * @t)
if @k % 2 == 0; return    @t
else;           return [-]@t
endif

参考:「C言語による最新アルゴリズム事典」 奥村晴彦=著 技術評論社