|
>次のようなテストマクロを実行します。
>#b の 値が 0,1 1.1 2.1 3.2 の場合は問題ないのですが,4.1 5.1 9.1
>の場合に表示が変です(6.1 7.1 8.1 でも同じです)。
>再現しますでしょうか?
マクロで再現できました。
これは、以下の件でstr文の精度を上げたため、そうなってしまっているようで
す。
http://www.maruo.co.jp/hidesoft/2/x23410_.html#23410
いろいろ試してみたら1桁精度を下げると大丈夫なようで、V7.08で修正してみ
ようと思います。
詳しく書くと、str文で浮動少数点数の場合は C の sprintf を使っているので
すが、V6.14までは
double n;
sprintf( sz, "%lG", n );
としてありました。
これでは切り捨てが多すぎるということで、V7.00から
double n;
sprintf( sz, "%1.16lG", n );
としてあります。
ソース中に直接
sprintf( sz, "%1.16lG", 4.2 );
sprintf( sz, "%1.16lG", 4.1+0.1 );
と書くと、
上は"4.2"で、下は"4.199999999999999"でした。
どうも 4.2 と 4.1+0.1 は double の計算では微妙に違う値になるよう
で・・・?
"%1.15lG"にすると大丈夫なようなので、そのように修正しておこうかと。
|
|