「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。
桁溢れ †
動作 †
オーバーフロー †
- 扱える数値の最大値を超える
- オーバーフロー時:System.OverflowException?例外、
アンダーフロー †
- 指数部が小さくなり過ぎる
- アンダーフロー時:System.UnderflowException?例外が発生する。
コンパイラ オプション †
.NETはコンパイラ オプションでオーバーフロー、アンダーフローのチェックが可能である。
キーワード / ステートメント †
コンパイラ オプションで設定したオーバーフロー、アンダーフローのチェックの既定の動作を変更したい場合は、
- C#では、checked、unchecked、というキーワードを使用する。
- VBではこのステートメントに合致するものが存在しない
- VBは暗黙の型変換を許容している。
- Option Strictをオンにすることで暗黙の型変換(による桁溢れ)を抑止できる。
小数点を持つ値の計算 †
問題 †
特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。
丸め誤差 †
打ち切り誤差 †
0.3333....
桁落ち †
計算結果が0に極端に近くなる加減算
情報落ち †
計算結果が0に極端に近くなる加減算
Decimal †
特に小数点を持つ金額の計算には、Decimalを用いる。
Decimalの特徴を以下に示す。
Decimalの特徴 †
- ほとんどの10進数の小数は2進数(Single、Double型などの浮動小数点型)で表現することができない。
- このような値は2進数では近似値でしか表現できず、その誤差が計算結果として現れる(打ち切り誤差)。
- ただし、k/(2^n)(kとnは整数)で表すこともできる小数は2進数でも表現できる。
- Decimalは浮動小数点型と比べ、金額計算の慣例に適合する。
- 10進数を表現する。
- 有効桁数が多く、範囲が狭い(28 ~ 29)。
- 格納できる値の大きさの範囲が狭いは、金額の計算には十分。
参考資料 †
- MSDNライブラリ > C#リファレンス > C#のキーワード > 型
Tags: :.NET開発