投稿日 | : 2005/05/21(Sat) 10:19 |
投稿者 | : Starfish |
Eメール | : |
URL | : |
タイトル | : Re^3: VBのバグです |
> 型変換する場合は List1.AddItem CInt(0.0282 * 10000) Cint 関数を使用するべきかと
> 思うのですが。
CInt関数は、四捨五入です。Int関数は、切り捨てですので、単純に代わりとして
使用できません。
> > 以下確認用に使用したプログラムです。VB6.0のデバッグモードでかつ2回目以降に
> >現象が発生します。他は正常です。これって、やっぱりバグでしょう。
> 私の環境では、1回目も2回目も同じで 281 です。
うちでは、1回目のみ282、以降は281になります。書き方が悪かったかもしれませんが、
1回目とは、VB起動直後の1回目のみです。
> ------------ 以下 サポート技術情報より抜粋 -------------
> [VB4 ] データ型と演算誤差についての注意 より
>
> 演算子によっては、同じ型どうしの演算でも違う型の結果を返します。
> 商を求める / 演算子は通常は倍精度浮動小数点数型になるため、次のサンプルでは
> 通貨型を利用していますが誤差が発生して結果は31になります。
> このような場合は、a / bの結果をいったん通貨型の一時変数に代入することにより、
> 期待する結果を得ることができます。
>
> Dim a As Currency, b As Currency
> a = 32
> b = 1000
> a = Fix((a / b) * 1000)
>
> 上記技術情報を見る限り バグ ではないと思います。浮動小数点による誤差からくる
> 計算結果だと思います。
> 尚、2回目以降に現象が発生する件は、確認できないので解りません。
マイクロソフトといえども、バグとわかっていても仕様どうりということで
逃げられるものは逃げようとしますから。
変数に代入しようが、必ず発生するのなら、仕様ですというのは理解できますが、
(1)1回目と2回目で実行結果が異なる。
(2)開発環境下とEXEにしたもので結果が異なる。
(3)VB.NETで発生しない。
この、3点から、VBのバグであるとの判断です。