「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>.NET開発]]

* 目次 [#kcd96454]
#contents

*概要 [#t3d0e5ae]
特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。

*桁溢れ [#xa851728]

**動作 [#v3f1c1b6]
***オーバーフロー [#k129fd21]
-扱える数値の最大値を超える
-オーバーフロー時:System.OverflowException例外、

***アンダーフロー [#l280271b]
-指数部が小さくなり過ぎる
-アンダーフロー時:System.UnderflowException例外が発生する。

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

-Visual Basicコンパイラ オプション一覧 > /optionstrict~
http://msdn.microsoft.com/ja-jp/library/3wh7c190.aspx

--C#コンパイラ オプション一覧 > /checked~
http://msdn.microsoft.com/ja-jp/library/h25wtyxf.aspx
--Visual Basicコンパイラ オプション一覧 > /removeintchecks~
http://msdn.microsoft.com/ja-jp/library/key2x70f.aspx

**キーワード / ステートメント [#g81e1418]
コンパイラ オプションで設定したオーバーフロー、アンダーフローのチェックの既定の動作を変更したい場合は、

-C#では、checked、unchecked、というキーワードを使用する。
--ステートメントのキーワード (C#リファレンス) > checked~
http://msdn.microsoft.com/ja-jp/library/74b4xzyw.aspx
--ステートメントのキーワード (C#リファレンス) > unchecked~
http://msdn.microsoft.com/ja-jp/library/a569z7k8.aspx

-VBではこのステートメントに合致するものが存在しない
--VBは暗黙の型変換を許容している。
--Option Strictをオンにすることで暗黙の型変換(による桁溢れ)を抑止できる。
---ステートメント (Visual Basic) > Option Strictステートメント~
http://msdn.microsoft.com/ja-jp/library/zcd4xwzs.aspx

*小数点を持つ値の計算 [#q5ebfe5d]

**問題 [#ybe85629]
特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。

***丸め誤差 [#mebdb497]
-切り捨て
-四捨五入
-切り上げ

***打ち切り誤差 [#yb8fec74]
0.3333....
0.3333....(無限級数)を有限項で打ち切った場合。

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

-有効数字 - Wikipedia~
https://ja.wikipedia.org/wiki/%E6%9C%89%E5%8A%B9%E6%95%B0%E5%AD%97
-桁落ちとは - IT用語辞典 e-Words~
http://e-words.jp/w/%E6%A1%81%E8%90%BD%E3%81%A1.html

***情報落ち [#i5bea01d]
計算結果が0に極端に近くなる加減算
非常に大きな数値と小さな数値の加減算で、~
小さな数値が結果に反映されない。

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

Decimalの特徴を以下に示す。

-DOBON.NET > プログラミング道 > .NET Tips > 基本~
小数(浮動小数点数型)の計算が思った結果にならない理由と解決法~
http://dobon.net/vb/dotnet/beginner/floatingpointerror.html

***Decimalの特徴 [#x2bcd749]
-ほとんどの10進数の小数は2進数(Single、Double型などの浮動小数点型)で表現することができない。
--このような値は2進数では近似値でしか表現できず、その誤差が計算結果として現れる(打ち切り誤差)。
--ただし、k/(2^n)(kとnは整数)で表すこともできる小数は2進数でも表現できる。

-Decimalは浮動小数点型と比べ、金額計算の慣例に適合する。
--10進数を表現する。
--有効桁数が多く、範囲が狭い(28 ~ 29)。
--格納できる値の大きさの範囲が狭いは、金額の計算には十分。

-問題点は、計算速度が遅いこと。

***参考資料 [#kd333163]

-MSDNライブラリ > C#リファレンス > C#のキーワード > 型 
--decimal~
http://msdn.microsoft.com/ja-jp/library/364x0z75.aspx
--float~
http://msdn.microsoft.com/ja-jp/library/b1e65aza.aspx
--double~
http://msdn.microsoft.com/ja-jp/library/678hzkk9.aspx

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



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS