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

投稿日: 2005/05/21(Sat) 16:04
投稿者Starfish
Eメール
URL
タイトルRe^5: VBのバグです

> >  CInt関数は、四捨五入です。Int関数は、切り捨てですので、単純に代わりとして
> > 使用できません。
>
> 四捨五入 ではなく丸めだと思うのですが(VB6.0 or .NET )
> 0.0282# だって丸めだし、Debug.Print (100 / 3 * 3) これも丸めの結果では。

 丸める方法が、四捨五入で丸めるか、切捨てで丸めるかの違いです。

Debug.Print CInt(0.288 * 100)
Debug.Print Int(0.288 * 100)

 CInt関数は、28.8=>29(小数点以下を四捨五入)
 Int関数は、28.8=>28(小数点以下を切り捨て)

> 但し、コンパイルで 最適化なし と あり では結果が違ってきますが。
> 最適化ありで 282 なし、もしくは  P-Code コンパイルで 281 です。
> (EXE にした場合)
>
> .NET では (最適化?)されているからでは。

 Int(0.0282 * 10000) の結果
 VB6.0 開発環境 1回目 282 2回目以降 281
 VB6.0 EXE(コンパイル)282
 VB6.0 EXE(P-Code)   281
 VB.NET         282

 本来単純な計算ですから誤差があったとしても、同じ値にならないと
おかしいですよね。VB6.0のインタープリッタで動いているときの
動作がおかしいのではないでしょうか。


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

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

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