TimberLandChapelのTech Blog

TimberLandChapel が提供する技術Tips,思いつきメモ,雑感ブログです。
Office 互換リボン Release 1.0 をリリースしました。

購読

今期のアンケート

INETAJ

Microsoft

SQL Server

TLC.com

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

情報処理関係官公庁

【VB6.0 Tips】CDec という魔法のおまじない
VB6.0に限らず,IEEE基準に従うfloatデータ型はそれ自体が既に概数です。
浮動小数点数は全ての小数を表現できないからです。

浮動小数点演算をレジスタ移動が頻発するようにコーディングしてしまうと
(具体的には演算途中のデータをfloat型変数に代入を繰り返す)
それだけで何度もの丸めが生じてしまい,ある意味誤差が広がることになってしまいます。

これに対応するために,
・そもそもfloatを利用しないでCurrencyを利用する
・floatを利用する場合は計算式をCDec()でDecimalキャストする
・途中計算結果を変数代入しないで一気に計算する
とすると,レジスタ移動による丸め極力排除することができます。

ようは
A,B,C,Dそれぞれfloat型だとして

D =CDec(A * B)
D =CDec(D / C)
と書くよりも

D =CDec(A * B / C)
と書くほうが丸めが発生する回数が少ない。
ということになります。
Published 2005年8月14日 22:44 投稿者 timberlandchapel

コメント

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

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