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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.