Closed baseballcap-mio closed 5 months ago
これについては、仕様です。 MSXべーしっ君と同様、演算時のオーバーフローチェックは甘くなっています。 エラーチェックを BASIC と同じに全部処理しようとすると、その負荷で「高速化」のメリットが殆ど無くなってしまうためです。 &H8000 は-32768 なので、-1 すると循環して 32767 になります。これは &H7FFF ですので、 BACONとしては正しい挙動になります。
同様に、演算をある程度割り切っている部分もあります。
DEFINT A-Z A=ABS(-32768)
これは正常に機能しません。 整数型の表現範囲が -32768~32767 で、32768 を表現できないためです。 MSX-BASIC では、この時点で単精度実数に格上げされるわけですが、 MSX-BACON では、コンパイル時に型を決め打ちで、ABS は引数の型に決め打つので ABS(-32768) は -32768 になる仕様と割り切っています。
このあたりも、いずれ「MSX-BASIC と MSX-BACON の違い」として説明書にまとめたいと思います。
了解しました。
下のプログラムを実行するとBASICでは120行でオーバーフローとなるがBACONでは正常終了する。 130行のコメントを外すと、BACONでは32767と表示される。
100 DEFINT A-Z 110 AD=&H8000 120 AD=AD-1 130 'PRINT AD 140 END