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 という魔法のおまじない
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 by timberlandchapel

Comments

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

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