まとレスで失礼します。
> ダウト。
> > 23.57875633239746 43.25 2
> > 23.57875722543352 43.25 2
> もうここですでに値が異なります。
> すなわち、表示だけ倍精度、という可能性が濃厚。
うう、眠くてよく見てませんでした。(>_<)
表示だけ倍精度、が正解のようですね。(^^;
> N88の場合、仕様では、引数の型が結果の型、ということになっています。
> このプログラムでは、2.0 という単精度型で割り算をしています。
> ここを 2# としてみたら、もしかしたら違いが出てくる可能性があります。
> このプログラムを load して list をみたら、
> 3050 X = S / 2! '; // Is there any better way to determine initial value?
> 3100 X = (X + S / X) / 2!
> と、自動で変換されてしまっていました。
なんと! インタプリタでは精度指定の無い定数は自動的に単精度になるのですね。
> もしかしたらkonnoさんのところでも、この手の意図せざる自動変換が発生している
> かもしれません。当然、コンパイラのほうでも。
> 一度、インタプリタのほうで list をたたいて、自動変換の有無を確認されたほうが
> いいでしょう。
T-98NEXT で確認しました。やはり自動変換されます。
> よくリストを見たら、結果表示がループの外に出ている。
> 結果表示が上書きのよう、というのはそのとおりなんですが。
> 結果表示がループの外、というトリックは、やっぱりkonnoさんだった。
げげ、他のソースからコピペして行番号を変えるのを忘れてました。m(__)m
申し訳ないです。m(__)m
> 前にも書いたと思いますが、もうちょっと行番号の並びとかインデントに気を配って
> プログラムを書いていただけないでしょうか。
> バグが混入し易くなりますよ、と、繰り返しお伝えしていますよね。
> こうやって、残り少ない人生を無駄にしてしまうわけですから。
インタプリタを弄るのはもう何十年ぶりなもので、うっかりやらかしてしまいました。m(__)m
気を付けます。m(__)m
> でも、このプログラムだと、N88なら、ループ内での途中表示は全くないはず。
> つまり、#11195の結果は出ないはず。
3110番を 3118 に変更すれば正常に出力されると思うのですが
私が何か勘違いしている?
> > 3110 if x < lastx then print "div=",lastx-x:goto 3070
> とやってみたらどうでしょう。
> 1回多くループするところで、いったい何がおきているのか見えてくるかも。
重複部分は以下のようになりました。
div 6.226795723485168D-08 13 13 8
div 2.220446049250313D-16 13 13 9
SQR( 169 )= 13 13 9
比較はほぼ間違いなく単精度でしょうね。(^^;