Access VBA 質問スレ Part2 (788レス)
Access VBA 質問スレ Part2 http://mevius.5ch.net/test/read.cgi/tech/1544620479/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
702: デフォルトの名無しさん [] 2023/10/04(水) 10:07:17.16 ID:e9fui2Qq 浮動小数点を経由するので誤差から免れることはできません(以下はイミディエイト ウィンドウでの実行と結果) ? Fix(33.6 * 10 ^ 2), Fix(33.6@ * 10 ^ 2), Fix(33.6! * 10 ^ 2) 3360 3359 3359 単精度でも同様 ? Fix(33.6@ * 10 ^ 2) / 100, Fix(CCur(33.6@ * 10 ^ 2)) / 100, Fix(33.6@ * 100) / 100 33.59 33.6 33.6 べき乗を使うことが誤差を生む原因の一部でもあったりするので、CCur()で一度補正?したりで影響を減らすとかも考えられます。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/702
704: デフォルトの名無しさん [] 2023/10/04(水) 14:52:16.68 ID:e9fui2Qq ? Fix(33.6@ * 10 ^ 2) , Fix(33.6@ * 100) 3359 3360 の結果からもわかるように、今回の場合は 10 ^ 2 の値が浮動小数点であり ≠100 である ということです なので「33.6@ * 浮動小数点」は33.6@を浮動小数点として計算する(はず)ので、その結果が 許容できない値になってしまったと 対策として CCur(33.6@ * 10 ^ 2)で本来の値に近くなるように書きましたが、 べき乗の部分を一度整数変数に代入してから「33.6@ * 整数変数」の形にしてもいいと思います(未検証) この場合、通貨型は内部整数 * 整数なのでここまでの計算結果に誤差はでません。(乗数マイナスは別) RoundDownDec()を大量に使用する場合はパフォーマンスも考慮しないといけませんが、乗数を整数変数経由に する方が CCur()関数使うより早いのではと思います(昔、関数使うと遅いなと思った経験)。 100万回くらい(適当)ループして検証してみてください。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/704
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.281s*