社内LT大会で話した資料です。
![gitのブランチ戦略](https://cdn-ak-scissors.b.st-hatena.com/image/square/53132ada2703551ae91ddf0cbe23b7ad538b5774/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F653a4ca7ad914cfabba5c45a067ef6b8%2Fslide_0.jpg%3F4470167)
[リストへもどる] [VBレスキュー(花ちゃん)] 一括表示 MsgBox Int(0.0282 * 10000) - Int 05/19-09:14 No.3276 Re: MsgBox Int(0.0282 * 10000) - じゃんぬねっと 05/19-09:22 No.3277 Re^2: MsgBox Int(0.0282 * 10000) - いな 05/19-09:52 No.3281 Re^3: MsgBox Int(0.0282 * 10000) - Int 05/19-13:39 No.3282 Re^4: MsgBox Int(0.0282 * 10000) - いな 05/19-14:23 No.3283 Re^5: MsgBox Int(0.0282 * 10000) - Int 05/20-13:08 No.3305 VBのバグです - Starfish
問題 Double型のデータをIntやFixで切り捨てた場合に誤差がでます。 浮動小数点なので当然誤差は出ますが、CDblのキャストのタイミングでも誤差が発生します。 ExcelVBAのイミデイトウィンドウで下記を実行してください。 環境によってはFix関数に渡す前にCDblでキャストした場合と、しない場合で計算結果が変わります。 再現環境 Office2010 32bit Windows7 64biy CPU Intel(R) Core(TM) i5 CPU M450 2.4GHz 原因 この問題は、下記のページでも議論されています。(このページではVB6が話題ですが、基本的に同じです) この原因には、計算途中の浮動小数点の精度とDouble型の精度に違いがあるために発生しています。 浮動小数点の演算の途中経過が64ビットの仮数を持つ80ビットのレジスタで計算しているが、Dobule型は
Double型のデータをIntやFixで切り捨てた場合に誤差がでる 浮動小数点なので当然誤差はでるのであるが、次の例を見てみよう イミデイトウィンドウで下記を実行してください。 ?Fix(0.6# * 10 ) 5 ?Fix(CDbl(0.6# * 10)) 6 誤差がでるのはいいとして、CDblで明示的に型変換をした場合としない場合で切捨て方法が異なる場合がある。 再現環境 Office2010 32bit Windows7 64biy CPU Intel(R) Core(TM) i5 CPU M450 2.4GHz これをVBAのバグという人がいるが、バグではなく、仕様だと思われる。 この原因だが、計算途中の浮動小数点の精度とDouble型の精度に違いがあるために発生する 浮動小数点の演算の途中経過が64ビットの仮数を持つ80ビットのレジスタで計算しているが、Dobule型は53ビット
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く