マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。

桁溢れ

動作

オーバーフロー

  • 扱える数値の最大値を超える
  • オーバーフロー時:System.OverflowException?例外、

アンダーフロー

  • 指数部が小さくなり過ぎる
  • アンダーフロー時:System.UnderflowException?例外が発生する。

コンパイラ オプション

.NETはコンパイラ オプションでオーバーフロー、アンダーフローのチェックが可能である。

キーワード / ステートメント

コンパイラ オプションで設定したオーバーフロー、アンダーフローのチェックの既定の動作を変更したい場合は、

  • VBではこのステートメントに合致するものが存在しない
    • VBは暗黙の型変換を許容している。
    • Option Strictをオンにすることで暗黙の型変換(による桁溢れ)を抑止できる。

小数点を持つ値の計算

問題

特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。

丸め誤差

  • 切り捨て
  • 四捨五入
  • 切り上げ

打ち切り誤差

0.3333....(無限級数)を有限項で打ち切った場合。

桁落ち

ほぼ等しい2つの数値の差を求める場合、
計算結果が0に極端に近くなり有効桁数が減る。

情報落ち

非常に大きな数値と小さな数値の加減算で、
小さな数値が結果に反映されない。

Decimal

特に小数点を持つ金額の計算には、Decimalを用いる。

Decimalの特徴を以下に示す。

Decimalの特徴

  • ほとんどの10進数の小数は2進数(Single、Double型などの浮動小数点型)で表現することができない。
    • このような値は2進数では近似値でしか表現できず、その誤差が計算結果として現れる(打ち切り誤差)。
    • ただし、k/(2^n)(kとnは整数)で表すこともできる小数は2進数でも表現できる。
  • Decimalは浮動小数点型と比べ、金額計算の慣例に適合する。
    • 10進数を表現する。
    • 有効桁数が多く、範囲が狭い(28 ~ 29)。
    • 格納できる値の大きさの範囲が狭いは、金額の計算には十分。
  • 問題点は、計算速度が遅いこと。

参考資料


Tags: :プログラミング, :.NET開発


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-17 (日) 14:59:59 (67d)