- ベストアンサー
×は正確ではないのでしょうか?
http://homepage1.nifty.com/rucio/main/kiso/DataType.htm の「1.型の基本情報」の「正確」と言うのは何でしょうか? ×は正確ではないのでしょうか? 変数の中身の数値に信憑性がなくなってしまうのでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
10進数で1/3を正確に表すことがきないのと同様に、0.1などの値をSingleやDoubleでは正確に表すことができないということです。 信憑性となるとケースバイケースですね。 預金の計算などだと、切り捨てするにしても、手で計算するのと違う結果がでてはいけませんので、不都合が生じますが、あくまでも、1/3が0.3333333・・・・となるように、0.1が0.0999999・・・・になるといった感じですから、物理演算など、普通に使う分には問題がない場合が多いです。
その他の回答 (7)
- bardfish
- ベストアンサー率28% (5029/17766)
金額の計算をする時、既存の型だと足りないことがあります。 COBOL的な考え方だと桁数で判断してしまいますが、C言語では桁数ではないですよね。 その辺が落とし穴になることがあります。 個人や中小企業レベルだと遭遇しないような桁の金額を扱うような集計なんかだと合計が違ってくるんですよね・・・ 実際にそういう経験があり、専用のライブラリを購入して切り抜けたことがあります。
お礼
回答ありがとうございました。
- ubku
- ベストアンサー率37% (227/608)
Single型やDouble型等の浮動小数点数型では小数を表すことができますが、その値には誤差が含まれます。その事が「正確」ではないとして×が付いていると思います。 以下のマクロは0.1を100回足し算します。 Sub mymacro() Dim i As Long Dim b As Double b = 0 For i = 1 To 100 b = b + 0.1 Next i Debug.Print b End Sub 答えは10と思いきや、結果は9.99999999999998となります。
お礼
回答ありがとうございました。
- notnot
- ベストアンサー率47% (4900/10361)
「正確」欄の意味は、この表の下に書いてありますが、ややおかしいです。 浮動小数点数は、2のべき乗の和で表せる数(整数とか、0.5とか、0.125とか)は(有効桁数の範囲内で)正確に表現できます。 そうで無い数(0.1とか、1/3とか)は正確に表現できません。 つまり、「正確に表現できない数もある」というだけであり、「常に誤差が含まれる」というわけでは無いので「×」というのは行きすぎでしょう。 Decimalも、1/3を正確に表現できないという意味では、同列です。10のべき乗の和で表せる数しか正確に表現できません。 また、言うまでも無いですが、Integerを初めとする整数系の型も、整数で無い実数は正確に表現できません。 ということで、どの数値型も「正確に表せる数もあるし、正確に表せない数もある」 正しく書くと、 整数系・・・・・「整数」を有効桁数の範囲内で正確に表現できる 浮動小数点系・・・・・「2のべき乗の和で表せる数」を有効桁数の範囲内で正確に表現できる Decimal・・・・・「10のべき乗の和で表せる数」を有効桁数の範囲内で正確に表現できる
お礼
回答ありがとうございました。
- bunjii
- ベストアンサー率43% (3589/8249)
>×は正確ではないのでしょうか? 表中の×印は使えない(表示や計算ができない)データ型になります。 データ型のByteは0~255の整数しか扱えませんので小数と負数に×印が付いています。 Shortは-32768~32767の整数しか扱えませんので小数に×印が付き、負数の整数は扱えますので負数には〇が付いています。 以下右側の値の範囲で説明通りです。 尚、正確さについては扱える範囲の計算結果は正確であることを示しています。 -印は数値の型ではないので評価対象外と判断してください。 宣言する変数の型を誤ると演算不可となりますので注意してください。 Decimalは10進数で正確に計算するためのものです。 SingleとDoubleは浮動小数点演算に使いますので正確性が疑問視されています。
お礼
回答ありがとうございました。
- maiko0333
- ベストアンサー率19% (839/4401)
10進数ではなく、2進数で格納しているからです。
お礼
回答ありがとうございました。
- neKo_quatre
- ベストアンサー率44% (737/1646)
その表の下に書かれているようです。 | 正確 … 正確な値を示すことができるかを表しています。×の場合は値に誤差が発生します。金額の計算など値の正確さが重要な場合はこの項目が×になっている型(Single, Double)は使用しないでください。数値型以外の型には関係ありません。 更にその下の例を見ると、丸め誤差があるから正確でないって話をしたいとか?
お礼
回答ありがとうございました。
- hiodraiu
- ベストアンサー率15% (451/2846)
これって、MSが出している正式な情報ではなく、このページを書いた人の考えですよね。 であれば、書いた本人じゃないと、この真意はわからないのでは?
お礼
回答ありがとうございました。
お礼
回答ありがとうございました。