数値式の計算精度


Q.

x, y を100以下の自然数として,不等式 1/2 ≦ 1/x + 1/y ≦ 3/4,xy を満たすものは何組有るか。」
の解を求めるために

100 LET  n=0
110 FOR x=1 TO 100
120    FOR y=x TO 100
125       LET z=1/x + 1/y
130       IF 1/2 <= z and z <= 3/4 THEN
140          LET  n=n+1
150          PRINT x;y
155       END IF
160    NEXT y
170 NEXT x
180 PRINT n
190 END

とすると正しい結果が得られるのに,

125 
130       IF 1/2<=1/x+1/y AND 1/x+1/y<= 3/4 THEN

とすると(x,y)=(3,6)という結果が得られない。なぜか?


A.

Full BASICでは,数値変数の精度がm桁であるとき,数値式はm + 1 桁を超える精度で評価されます。
(仮称)十進BASICでは数値変数の精度は15桁なので,数値式は16桁を超える精度で計算されます。
(仮称)十進BASICで,x=3,y=6 のとき 1/x+1/y を計算すると,結果は .499999999999999999999999999 になります。 したがって,このとき, 1/2<=1/x+1/y は偽になります。
 しかし,1/x + 1/y の計算結果を変数zに代入すると,計算結果は15桁の精度になるように四捨五入され,z=0.5 になります。 ですから,1/2 <= z は真になります。

 オプションメニュー−数値で「表示桁数を多く」にチェックしておくと,十進(JIS)モードでは計算結果を最後の桁まで正確に表示するので,上述の事情を検証してみるのが容易になります。


なお,(仮称)十進BASICで分数を正確に扱いたいときは,有理数モードを利用することを推奨します。


戻る