VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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のバグであるとの判断です。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -