PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
23990 | 14/05/16 10:26:13 | RE:PB12.5: long型加算値の誤差 By asano01 |
23989 | 14/05/16 10:26:26 | PB12.5: long型加算値の誤差 By asano01 |
カテゴリ:スクリプトの記述
日付:2014年05月16日 10:26 発信者:asano01
題名:RE:PB12.5: long型加算値の誤差
こんにちは。
原因は、浮動小数点とパソコンの誤差問題によるものです。
いま、検証の時間がないので、昔の事例を貼っておきます。
○PowerBuilder
誤差の発生 : 浮動小数点と十進数表現の理解
http://www.powerbuilder.jp/technical/2010/01/post-2.html
Decimal型のカラムに対してGetItemNumber関数を行い取得した値にて計算を行うと、計算結果に誤差が生じます。
http://www.powerbuilder.jp/technical/2011/05/tech000-0988.html
○Microsoft
Excel で浮動小数点演算の結果が正しくない場合がある
http://support.microsoft.com/kb/78113/ja
[XL] 浮動小数点の計算誤差と IEEE フォーマット
http://support.microsoft.com/kb/402554/ja
google> 浮動小数点の誤差
google> IEEE 754 規格
第4回 演算誤差の正体
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml
浮動小数点数型と誤差
http://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html
浮動小数点数の表現と誤差
http://www.edu.cc.uec.ac.jp/mce/c1-3m/ref/FloatingPoint.html
以上、一助になれば幸いです。
>こんにちは。
>
>一度datawindowのカラムの値をgetitemnumber()して変数に加算
>その変数を別のdatawindowのカラムにセット、DB更新すると1円の誤差が生じることがあります。
>原因がわかりませんので、ご教授願います。
>
>以下スクリプト----------------------------------
>Long l_Zei
>
>l_Zei = 0
>For l_Row = 1 To dw_1.Rowcount()
> l_Zei = l_Zei + dw_1.GetItemNumber(l_Row,"消費税_明細")
>Next
>
>dw_2.SetItem(1,"消費税_合計",l_Zei)
>----------------------------------
>
>dw_1の消費税_明細の集計値dw_2の消費税_合計の値がたまに1円違います。
>dw_1は更新済みのDBをretrieveしています。
>DBはoracle 11gで消費税_明細、消費税_合計 どちらもNUMBER(9,0)です。
>具体例
>明細1行目 消費税_明細 242円
>明細2行目 消費税_明細 400円
>消費税_合計 641円
>
>常に起こるわけではないので非常に困っています。
>よろしくお願いいたします。
>
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS (記載なし)
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.