内部表現についても、仮数部23ビット、指数部8ビット、符号1ビットという部分に変化はない。N88の単精度では精度を落としていないかというといささか怪しいというか断言はできない。なにかというと、十進数との変換部分。#11135にも書きましたが、仕様としては有効桁7桁、出力のときは7桁目が四捨五入されて6桁で表示、となっているわけですよ。他の処理系では例えば、有効桁7桁で表示も7桁、となっているかもしれない。あれば少なくとも見かけの精度は落ちているわけです。他の処理系では、7桁目で四捨五入ではなく切り捨て表示となっているかもしれないし。あまりにも他のマシンと差があるようであれば、当時、大騒ぎになっているのではないかなぁ。あの時代、ネットはなくてもパソコン雑誌はあったし、8ビットのころはともかく16ビットの時代はパソコン通信もあったし。いうことで、とりあえず現時点では根拠不足としてkonnoさんのご意見に賛同はしないでおきます。#つまり、何かあればすぐに意見は変わるただ、エミュという意味では、よく言われる「バグまで再現した」というものが評価が高いわけで、現状、実機と差異が出るエミュは、完成度としてはもう一歩、というのが現実的な評価だと思われます。続報をいただいたことで、誤解は氷解しました。紛らわしい表現で誤解させてしまい申し訳ないです。単精度の精度もわざと落としているように見えます。考えてみたら、これは表示だけなのかもしれませんね。使用しているように見えます。中なのではないですか。これ、実はN88のマニュアルに載っているサンプルです。なるべきなのだそうです。この結果を忠実に再現するために、わざと内部数値まで桁落ちさせたのではないかと疑い始めました。しれないと思うようになりました。作ったのは、著作権の問題回避の為なので、バイナリレベルで違うものでなければならないわけです。したら、この部分がそのための直せない生贄だったりして。現実的な評価だと思われます。NP2は、細部の再現性にこだわったエミュという評価があるようなのですが先のサンプルプログラムの結果は忠実に再現していますね。中なのではないですか。中身の呼び出しのみ、という可能性は高そうです。この結果を忠実に再現するために、ある意味、この結果「だけ」を忠実に再現している、という感じ。「実機を忠実に再現」するのであれば、169は合成数と表示される必要がある。この点がなされない限り、実機に対するエミュとしての完成度は今一歩、というところで終わってしまいそうです。世の中には、既知のバグどころか未知のバグまで再現したエミュレータというものもある模様。実機で新たなバグが発見されてから、エミュレータでも同じバグが発現した、なんて話もあるようで、とても不思議。いうのが、いわゆる「完璧なエミュレータ」というやつでしょう。作ったのは、著作権の問題回避の為なので、これはそのとおりだと思いますが、その一方で、実数のバイナリ表現というものはある意味で規格化されているわけです。実数演算とかバイナリと十進数の変換とかの部分は世の中にいくらでもサンプルコードとかライブラリとかのフリーで使えるものが存在しているわけで、そしてそういうものを使えば少なくとも著作権の問題は回避できるはず。その手のコードって世界中の人が見ているわけですから、精度を落とす方向にいじることは少ないのではないかなぁ。いうか、わざと精度を落とす、なんてことに時間をかけるくらいならとっととリリースしてくれよ、という気もする。いうものを使わずに1からコードを書いていたら、十分な精度を確保できていなくても不思議はないけど。あ、でも、ありうるかな。倍精度のほうが現在のありふれたものとは内部表現が異なっているようだから、そちらのほうに合わせて、ということはあるかも。実は私、実数演算についてはちょっとだけやかましい。#2066とか#10367にも書いたけど、大昔、8ビットマシンの時代、実数演算のマシン語ルーチンを書いてハンドアセンブルしていたもので。いっても四則演算だけですけどね。バグが発現した、なんて話もあるようで、とても不思議。「完璧なエミュレータ」というやつでしょう。いや、なんでもないです。実は私、実数演算についてはちょっとだけやかましい。ルーチンを書いてハンドアセンブルしていたもので。いっても四則演算だけですけどね。面倒くさいんですよね。DANNYさんの浮動小数演算ライブラリを目にしていたので見てみました。ASMは1531行ありましたね。バイナリは恐らく2千バイトくらいになるのかなぁ。J3100用BASICコンパイラの続報も書かなくてはいけないのでこの辺で。1konnoさん、なんか他のものを連想している。面倒くさいんですよね。鶴亀算は整数演算です。何だろう、何と勘違いしたんだろう。おいらにはわからない。鶴亀算は整数演算です。何だろう、何と勘違いしたんだろう。おいらにはわからない。あう、多分整数演算の事だと思います。(>_<)私は算数も数学も苦手というか、数字の計算や記憶が全くダメなんですね。パソコンにやらせようと思うのです。割り算を2回するのではなく掛け算と割り算の組み合わせに変更してみました。これでどのくらい早くなるかは測定していないからわからない。処理系によっては、むしろ遅くなったりして。いうやり方もあるのですね。実行時間が短縮されました。コンパイラでは最適化でインタプリタと違う結果になるようです。どこがどう効いたかわからないので、変更ソースを上げます。合成数が含まれています。何が原因かわからないです。実行時間が短縮されました。プログラムに間違いがあるから。単純にループ回数が2倍になってしまう。いうことで、おそらく、30秒は15秒ぐらいまで短縮できるはずだけど、それでもやっぱり8秒までは縮まらないと思う。SQR関数の精度のほうは、どうしようかな。1SQRの計算を自前で出来ないか検索してみました。」https://cpplover.blogspot.com/2010/11/blog-post_20.htmlここがわかりやすかったのでここから引用します。method)と呼ばれている、歴史あるアルゴリズムである。この方法は、手動でも、プログラミングでも、非常に簡単に計算できる、大変便利で汎用的なアルゴリズムである。速度もそれほど遅くない。おお、素数が合ってるし、時間が半分になりました。SQR()関数を2回実行していたのをサブルーチン1回にしたのが効いたみたいです。おお、時間がさらに短縮して、FOR文のループとほぼ同じになりました。2〜3秒遅くなりましたね。これが関数とサブルーチンの速度差と思われます。思ったよりも差が無いなぁ、というのが感想です。(^^;素数のネタはこの辺でしまいにしたいところですね。置き換えたテストがえと、whileのループをifのジャンプに変更したのはなぜでしょうか。素数のネタはこの辺でしまいにしたいところですね。明日、31日に実家へ行くので、時間が取れたら実機でいくつか試したいところ。実は、父の命日が31日なんですよ。日が近いということで、多くの場合、墓参りはお彼岸に集約されています。天候だとか諸事情でお彼岸に墓参りできないときだけ命日に墓参り、と言う感じなのですが、まぁいろいろと存在しない事情をでっち上げて実家に顔を出すところまではアポイント済み。時間が取れるかどうかは別問題なんで。えと、whileのループをifのジャンプに変更したのはなぜでしょうか。IF文に変えてしまってました。2〜3秒遅くなりましたね。これが関数とサブルーチンの速度差と思われます。同じ条件では、while文の方が速いと思われます。10万で4秒の差でした。思ったよりも差が小さかったですね。1回あたり7〜10回程度のループで済んでいるから差が小さいのでしょう。まではアポイント済み。時間が取れるかどうかは別問題なんで。お手間を取らせて申し訳ないですが、よろしくお願いします。変数Jのカウントアップも1ずつのままで10000までの結果。素数の数は1229と出ました。うちの環境では誤差がないみたい。ちなみに、所要時間は、画面表示だと12秒、ファイル出力だと13秒。これはいささか直感と記憶に反している。記憶だと、画面表示のほうがスクロールアップに時間がとられるので遅くなったはずなのですがね。ま、でも、誤差の範囲。したら所要時間は7秒まで短縮。ループ回数が2倍というのは大きかった模様。素数の数は1229なので、計算誤差の問題もないですね。ところで、うちのBASICインタープリタは1987年製のVer5.0というやつです。さんへのコメント実家に来ています。うちのN88-BASICでは、素数の数が168になりました。169は素数としてカウントされませんでした。SQR関数、うちの環境のほうが精度が高いらしい。ちなみに、ファイル出力ではなく画面表示で、所要時間は0秒〜1秒くらい。時間切れ、続きは後ほど。1実家での検証、最後。割り算を2回するのではなく掛け算と割り算の組み合わせに変更してみました。これでどのくらい早くなるかは測定していないからわからない。Iこうやって、割り算2回で20000までの素数を求めたら21秒で2262個。元のままの、割り算と掛け算だと17秒、2262個。うん、やっぱりうちでは、誤差というには差が大きいくらい、掛け算のほうが早い模様。以上、レス元が分散して申し訳ありませんが、実家での検証3連発でした。2ここにまとレスします。うちのN88-BASICでは、素数の数が168になりました。169は素数としてカウントされませんでした。SQR関数、うちの環境のほうが精度が高いらしい。いうことは、98エミュの問題か、ファイルが壊れているかですね。ちなみに、所要時間は、画面表示だと12秒、ファイル出力だと13秒。これはいささか直感と記憶に反している。画面表示は遅いというのは思い込みなのでしょう。ところで、うちのBASICインタープリタは1987年製のVer5.0というやつです。BASICC.COMうちで使用したコンパイラ版はこれですね。やって、割り算2回で20000までの素数を求めたら21秒で2262個。元のままの、割り算と掛け算だと17秒、2262個。