財務データに使用する固定小数点標準を探しています。試してみる価値のあるものはありますか? その手作りの固定小数点クラスのパフォーマンスに関する経験はありますか?
7 に答える
Dr.Dobb's には、C++ での固定小数点算術型の実装の可能性に関する記事があります。これをチェックしてください。
ああ。金融システムはトリッキーです。主な問題は固定小数点演算ではなく、丸め誤差です。
クライアントの種類ごとの割引と付加価値税が含まれた素晴らしい計算でいっぱいの素敵なスプレッドシートを持つことができます. 合計を出して会計士に提示すると、会計士は値がすべて間違っていると言います。理由: 出力は小数点以下 2 桁のみでフォーマットされている可能性がありますが、内部的には、値は float または double のすべての小数点以下の桁を持ちます。そして、それらは合計されます。
財務状況を把握し、基準値をどこに置くかを決定する必要があります。つまり、会計士がチェックする値は何ですか (はい、ビジネスの知識が必要です。「トリッキーな」部分を覚えておいてください)。
値を永続的な形式 (データベース、ファイル、メモリなど) に保存する前に、乗算と除算によって追加された余分な小数点以下の桁数を切り捨てます。
小数点以下 N 桁のクイック アンド ダーティ ソリューション: ((double)((int)(Value * N * 10.0)))/10.0
もちろん、財務に必要な丸めの種類を正確に確認する必要があります。
私は固定小数点数学クラスを使用しています。これは、多かれ少なかれフロート/ダブルの代わりになるように設計されています。http://codef00.com/coding
編集:補足として、私はこの目的で固定小数点クラスを個人的に使用しません。代わりに、セント数 (または、必要に応じて 10 分の 1 セント、または 100 分の 1 セント) を格納します。それを直接計算するだけです。次に、ユーザーに表示するときに値を適切にスケーリングします。
IBM のdecNumber++
すべての財務値をセントで表すには、64 ビットの int 型で十分です。
いくつかの正しい定義のために、パーセンテージを正しく丸めるように注意する必要があります。
ISO は、C、TR 24732、および C++、TR 24733 に対する 10 進拡張を指定しました。これらは、ISO Web サイトで有料で入手できます。公開されている C++ 標準にはまだ含まれていません。GCC は、組み込み型とそのライブラリ実装を提供します。別の実装が Intel から入手できます。これを C++ に含めるための最新のプッシュはhereです。