「x, y を100以下の自然数として,不等式
1/2 ≦ 1/x + 1/y ≦ 3/4,x≦y
を満たすものは何組有るか。」
の解を求めるために
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)という結果が得られない。なぜか?
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で分数を正確に扱いたいときは,有理数モードを利用することを推奨します。