> とりあえず、試したいことリスト。
試してきました。
> #11208のpn88.bas、倍精度と単精度
pn88単精度
.000000000000000000
合成数 13 13
pn88b倍精度
.000000000000000000
合成数 13 13
> #11175のPN88.BASでNを単精度にしただけのもの
合成数と出ました。
> そして、#11175のN88P.BASの改造版、以下。
単精度でも倍精度でも同じ、
3 13
5 13
7 13
9 13
11 13
合成数
と出ました。単精度でも倍精度でも同じです。
うむ、興味深いぞ。
> 190 IF I<=SQR(N) THEN PRINT "合成数" ELSE PRINT "素数"
Iも13、SQR(N)も13なのだから、合成数と表示されるのが正当。
そして実際、うちでは想定どおり動いています。
ところが、konnoさんのところでは、単精度型ではこの比較式が成り立たず、ELSEに
落ちてしまっている。そして、倍精度型ではきちんと動いている。
なんか、エミュの挙動がおかしいとしか思えない。
前にも書きましたが、N88BASICの仕様では、関数の結果は引数と同じ型になることに
なっています。つまり、Nが単精度ならSQR(N)の結果も単精度のはず。だから、小数点
以下の細かいところの値が出てくることがおかしい。
もしかしたら、次のような簡単なプログラムでも、実機とエミュで差が出たりして。
0 A#=1.23456789#
20 B!=A#
30 PRINT A#,B!
これ、実はN88のマニュアルに載っているサンプルです。
そして、仕様上のこの実行結果は
RUN
.23456789 1.23457
となるべきなのだそうです。
もしエミュでこうならないとしたら、それはどこかがおかしい。
エミュの作者に調査を依頼してもいいかも。
追伸
#11213
> 110番の THEN ELSE はこれでいいんでしょうか。
> 110 IF N MOD 2=0 THEN ELSE *ELSE1
N88BASICでは、言語仕様として、THEN節に空文を許します。
つまり、THEN のときは、何もせずに、次の行に進むことになります。
これ、#11169で触れているとおりです。