- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6のFIX関数での誤差について)
VB6のFIX関数での誤差について
このQ&Aのポイント
- VB6のFIX関数を使用すると、DOUBLE型の数値または数式を入れる構文となっていますが、明示的な変換を行わなくても内部的にDOUBLE型へ変換しているため、1円の誤差が発生することがあります。
- マイクロソフトのサポートはVB6について終了しているため、問い合わせても解決策を得ることは難しいかもしれませんが、VS2005で同じFIX関数を試すと正確な値が戻ってくることがあります。
- VB6はデータ型をあまり意識しなくても良い仕様の言語であるため、FIX関数を使用する際には誤差の可能性に注意が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
つい最近似たような質問をどこかで見かけたと思ったら以下の所にありましたので こちらもご覧になってみてはいかがでしょうか。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45042&forum=36&7
その他の回答 (2)
- Nii
- ベストアンサー率48% (79/162)
回答No.3
コンピュータの演算誤差については、下記ページが参考になるかと (探せば、もっといいサイトもあると思うが^^;) http://www.geocities.co.jp/SiliconValley/4334/unibon/topic/radixerror.html
質問者
お礼
参考になりました。 ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.1
確かに 即値で書いた場合は誤差が発生するようです Fix( 7520 * 0.15 ), Fix(CDbl(7520) * 0.15 ), Fix( 7520 * CDbl(0.15)) すべて 1127でした 0.15を 通貨型(Currency)にして計算計算してやると上手くいきます また 最初に Double型の変数に代入してからFixに渡すと 1128を返すようです どこかで精度落ちしてるのでしょう CDbl(7520) * CDbl(0.15) - CDbl( 7520* 0.15 ) を実行すると -4.17443857259059E-14 といった微小な誤差が出ているようです
質問者
お礼
ありがとうございました。 7520はCurrencyにしていたのですが、 0.15は定数にしていたのでDouble型の 変数となっていた為の誤差でしょうか。 修正して確認してみます。
お礼
ありがとうございました。 リンク先も大変参考になりました。