数値計算がおかしい??

 投稿者:安田明  投稿日:2012年10月29日(月)06時40分40秒
  以下のプログラムを、10進モードで実行すると (9+6)/9*6が10と認識されません!
2進モードでは正常です。
何が原因でしょうか?
十進BASICへの信頼がゆらいでます!


!   Check_DisplayABCD
!     2進と10進で実行すると異なる???
!              2201.10.29   06:00
!----------------------------------------------

Declare numeric A,B,C,D
LET A=9
LET B=6
LET C=9
LET D=6
PRINT  "(A+B)/C= ";(A+B)/C

PRINT  "(A+B)/C*D= ";(A+B)/C*D
PRINT
PRINT  "A=9,B=6,C=9,D=6 のとき"
If (A + B) / C * D = 10 Then
   PRINT  "(A + B) / C * D = 10 成立します"
ELSE
   PRINT "(A + B) / C * D = 10 成立しません"
End If
!---------------------------------------

LET A=9
LET B=6
LET C=3
LET D=2
PRINT
PRINT  "A=9,B=6,C=3,D=2 のとき"
If (A + B) / C * D = 10 Then
   PRINT  "(A + B) / C * D = 10 成立します"
ELSE
   PRINT "(A + B) / C * D = 10 成立しません"
End If

END
 

Re: 数値計算がおかしい??

 投稿者:白石和夫  投稿日:2012年10月29日(月)15時59分17秒
  > No.2012[元記事へ]

十進BASICの利点は,近似計算のむずかしさを理解しやすいところにあります。
たとえば,1.66666666666666666666666667を6倍して10にならないことは容易に理解できると思います。

十進BASICのPRINT文は計算結果を丸めて表示しています。
計算結果をそのまま表示したいときは,
「オプション」メニューの「数値」で,「表示桁数を多く」にチェックしてください。

なお,
も参考にしてください。
 

Re: 数値計算がおかしい??

 投稿者:山中和義  投稿日:2012年10月30日(火)11時09分55秒
  > No.2012[元記事へ]

安田明さんへのお返事です。

> 10進モードで実行すると (9+6)/9*6が10と認識されません!
> 2進モードでは正常です。

対策としては、
演算が有理数の範囲なら、有理数モードを使う。
浮動小数点では、
 IF (A + B) * D = 10 * C THEN
と極力割り算を避けるようにするのがいいと思います。
できない場合は、
 IF (A + B) * D / C  = 10 THEN
と最後に割り算を行うのがいいと思います。
(この場合のように割り切れる可能性があるが、オーバーフローが発生する場合もある)


逆の場合では、

例 0.1の内部値(10進法→2進法、10進法→10進法)
LET A=0.1
PRINT A
FOR i=1 TO 10
   LET S=S+A
NEXT i
PRINT S
IF S=1 THEN PRINT "1です。" ELSE PRINT "1でない。"
END
 

戻る