タイトル | : Re^4: SQRの単精度と倍精度の表示検証ソース |
投稿日 | : 2024/04/13(土) 01:13 |
投稿者 | : としき |
参照先 | : http://toshiki.la.coocan.jp/ | 番 号 | : 11215 11209 番 としき さんへのコメント コメント数 1 |
> とりあえず、試したいことリスト。試してきました。> #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)の結果も単精度のはず。だから、小数点 以下の細かいところの値が出てくることがおかしい。 もしかしたら、次のような簡単なプログラムでも、実機とエミュで差が出たりして。 10 A#=1.23456789# 20 B!=A# 30 PRINT A#,B! これ、実はN88のマニュアルに載っているサンプルです。 そして、仕様上のこの実行結果は RUN 1.23456789 1.23457 となるべきなのだそうです。 もしエミュでこうならないとしたら、それはどこかがおかしい。 エミュの作者に調査を依頼してもいいかも。 追伸 #11213> 110番の THEN ELSE はこれでいいんでしょうか。> 110 IF N MOD 2=0 THEN ELSE *ELSE1N88BASICでは、言語仕様として、THEN節に空文を許します。 つまり、THEN のときは、何もせずに、次の行に進むことになります。 これ、#11169で触れているとおりです。
- No.11215 一括表示へ - コメント元:11209 一括表示へ - [ 返信 ] [引用無し] pre