TimberLandChapel's Tech Blog

TimberLandChapel provide Tips, tech note and scribbling.
Updated my site as English site for APAC users.
TLC.com .Metrix 4.0 Beta1 released

サイトの日本語化方法はこちら

Syndication

News

INETAJ

情報処理関係官公庁

SQL Server

TLC.com

Microsoft

クリエイティブ・コモンズ

http://www3.clustrmaps.com/
【VB6.0 Tips】CDec という魔法のおまじない(2)
計算結果が不安定になるよい例ですね。
浮動小数点の特性を知るにはこういうのがよいかな?
と思います。

これを実行すると,
結果が「3」と出る場合と「2」と出る場合とが混在してきます。
IDE上でやってみたり,
EXEにコンパイルしてやってみたりと実行回数を重ねればてんでたいへんなことになります。
まぁ,浮動小数は概数なんだよ。
というのは当然として,概数の丸めってこんなに不安定でいいのか?
と思うところではありますが,
メインフレームのXDとかはもっと丸めの評価自体が安定しているのですよね。

基本的には乗算を優先して,除算を後回しにする。というのも効果的ですが。
最終的には固定小数点を使って,尚且つ計算手順を工夫して除算を排除する。
ということになりますね。

Private Sub Command1_Click()
Dim Buff As String
Dim DoubleValue1 As Double
Dim DoubleValue2 As Double

DoubleValue1 = CDbl(2.9)
DoubleValue2 = CDbl(0.1)

Buff = CStr(Int(2.9 + 0.1))
MsgBox Buff

Buff = CStr(Int(DoubleValue1 + 0.1))
MsgBox Buff

Buff = CStr(Int(2.9 + DoubleValue2))
MsgBox Buff

Buff = CStr(Int(DoubleValue1 + DoubleValue2))
MsgBox Buff
End Sub
Published 2005年8月14日 22:45 by timberlandchapel

Comments

# 【TLC の Tech Blog 復刻版】VB6.0 で使う CDec という魔法のおまじない@ 2005年8月14日 22:53

旧ブログで3回にわたって書いた,小連載です。
VB6.0 で浮動小数点を扱う際の注意点というか,豆知識というか。
根本的な解決は図れないですけど,知っていて損は無い情報です。
■CDec という魔法のおまじない...