|
三角関数の数値実験をしていて疑問が出ました。
DECLARE EXTERNAL FUNCTION SIN
DECLARE EXTERNAL FUNCTION cos
DECLARE EXTERNAL FUNCTION TAN
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640*2+1,640*2+1 ! x,y軸方向にデフォルトの2倍拡張
SET WINDOW -21,21,-150,150 !x,y
DRAW grid(1,10)
SET LINE COLOR 2
FOR x=-21 TO 21 STEP .1
LET f=x/PI*x-TAN(x)*x
PLOT LINES:x,f;
NEXT x
LET x=PI/2
PRINT x/PI*x-TAN(x)*x
PRINT STR$(PI)
PRINT TAN(PI/2)
END
! 1000桁モードで利用する正弦,余弦,正接関数
EXTERNAL FUNCTION sin(x)
DECLARE EXTERNAL FUNCTION cos
OPTION ARITHMETIC DECIMAL_HIGH
IF x<0 THEN
LET sin=-sin(-x)
ELSEIF x>2*PI THEN
LET sin=sin(MOD(x,2*PI))
ELSEIF x>PI THEN
LET sin=-sin(x-PI)
ELSEIF x>PI/2 THEN
LET sin=sin(PI-x)
ELSEIF x>PI/4 THEN
LET sin=cos(PI/2-x)
ELSE ! マクローリン級数による近似
LET y=x
LET n=0
LET t=y
DO
LET y0=y
LET n=n+1
LET t=-t*x^2/((2*n)*(2*n+1))
LET y=y+t
LOOP UNTIL y0=y
LET sin=y
END IF
END FUNCTION
!
EXTERNAL FUNCTION cos(x)
DECLARE EXTERNAL FUNCTION sin
OPTION ARITHMETIC DECIMAL_HIGH
IF x<0 THEN
LET cos=cos(-x)
ELSEIF x>2*PI THEN
LET cos=cos(MOD(x,2*PI))
ELSEIF x>PI THEN
LET cos=-cos(x-PI)
ELSEIF x>PI/2 THEN
LET cos=-cos(PI-x)
ELSEIF x>PI/4 THEN
LET cos=sin(PI/2-x)
ELSE ! マクローリン級数による近似
LET y=1
LET n=0
LET t=y
DO
LET y0=y
LET n=n+1
LET t=-t*x^2/((2*n-1)*(2*n))
LET y=y+t
LOOP UNTIL y0=y
LET cos=y
END IF
END FUNCTION
!
EXTERNAL FUNCTION tan(x)
DECLARE EXTERNAL FUNCTION sin,cos
OPTION ARITHMETIC DECIMAL_HIGH
LET tan=sin(x)/cos(x)
END FUNCTION
-----------------------------------------
1.5707963267948966192313216916397514420985846996875529105
1.5707963267948966192313216916397514420985846996876 後で気付いた丸め効果
カシオ 高精度計算サイト50桁の計算結果
tan(1.5707963267948966192313216916397514420985846996876);
tan(pi/2);
sin(1.5707963267948966192313216916397514420985846996876);
cos(1.5707963267948966192313216916397514420985846996876)
x/pi*x-tan(x)*x
x=1.5707963267948966192313216916397514420985846996876
30000000000000000000000000000000000000000000000000
1.5707963267948966192313216916397514420985846996876/pi*1.5707963267948966192313216916397514420985846996876-tan(1.5707963267948966192313216916397514420985846996876)*1.5707963267948966192313216916397514
3.3358 × 10^49
一般的にはtan(pi/2)は計算不能だと思われます。しかし
cos(1.5707963267948966192313216916397514420985846996876)=-5.E-50
十進BASIC 1000桁モードでも同様の計算結果なので、誤差とは言えませんが
x/pi*x-tan(x)*x
pi/2 の計算結果の数値を入力すると各社の計算結果と合わないです。私には理解不能です。
http://blogs.yahoo.co.jp/donald_stinger
|
|