- PR -

490/4.9=99.99999

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-11-21 18:47
引用:

siopさんの書き込み(2005-11-21 10:34)より:

今回の質問のズバっとした回答としては、
「10進数を2進数で完璧に現すことができないから」
になると思います。


 違います。
引用:

siopさんの書き込み(2005-11-19 07:51)より:

小数点はdoubleを使えばいいや〜って思って


、特徴を理解しないまま使うからです。


 なお、decimal だからといって、丸め誤差が発生しないわけではありません。
引用:

C# 言語の仕様 4.1.7 decimal 型 より:

絶対値が 1.0m 未満の decimal 型の値は、小数点以下第 28 桁までは正確ですが、それより小さい値は正確ではありません。絶対値が 1.0m 以上の場合の decimal 型の値は、28 または 29 桁までは正確です。


さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2005-11-21 21:21
引用:

ぼのぼのさんの書き込み (2005-11-21 12:33) より:

皆さんわざとですか?


その手段がどのような特性を持っているのか、
理解しないまま振り回したところで、何の解決にもならんのですよ。
お客さんがかわいそうだと思いませんか。
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-11-21 21:36
そもそも、整数以外の数値には誤差はつきものですよね。

じゃんぬさんが、よい例を出されています。

コード:

Dim d1 As Double = 490 / 4.9 '99.9999...
Dim d2 As Decimal = 490D / 4.9D '100



この場合

コード:

If d1 = d2 Then



にどういう意味があるのかを考えないことには、無意味だと思うのですよね。


もひとつ蛇足ですが
'99.9999...
というのは数値をどのように十進表記するかの実装に依存するだけの話です。


使い方次第なわけで、人為的な四捨五入や切り捨て、切り上げが計算結果に関係なければ
Decimalの出番はそれほどないように思います。

99.9999... = 100.0000

だったりするわけですら。

法的な制度以外でDecimalを使わねばならないケースってはたしてあるものでしょうか?



[ メッセージ編集済み 編集者: ジブ 編集日時 2005-11-21 21:38 ]
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-11-21 21:52
よく読んでいなかったです。

引用:

今回の質問のズバっとした回答としては、
「10進数を2進数で完璧に現すことができないから」
になると思います。



10進数(小数)にはDecimalを、自然数にはSingleやDoubleを

って単純な話だったのね。。。。。。



[ メッセージ編集済み 編集者: ジブ 編集日時 2005-11-21 21:53 ]
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2005-11-21 22:06
つっこみ失礼。
引用:

ジブさんの書き込み (2005-11-21 21:52) より:

10進数(小数)にはDecimalを、自然数にはSingleやDoubleを


「自然数」って何かわかってらっしゃいます?
もしかして「実数」と書きたかったんですか?
その場合でも、SingleだろうがDoubleだろうが、実数を完璧に表現することは不可能ですが。
[追記]
と書きましたが、Decimalと、SingleやDoubuleは、いずれも、
仕様上の制限の下で実数を表現するための方法ですね。
[/追記]

で、その辺を理解しようともせずに
「演算を人間の振る舞いのままにトレースするという簡単なことが、
なぜすぱっとできないのか」とだだをこねている、と。
引用:

って単純な話だったのね。。。。。。


世の中、便利になるのは悪いことじゃないですよ。
でも、技術者が技術に甘えては、話にならんでしょうが。

[ メッセージ編集済み 編集者: さいくろう 編集日時 2005-11-21 22:22 ]
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-11-21 22:14
引用:

「自然数」って何かわかってらっしゃいます?
もしかして「実数」と書きたかったんですか?
その場合でも、SingleだろうがDoubleだろうが、実数を完璧に表現することは不可能ですが。



さて、実数を完璧に表現する?ことは十進数二進数にかかわらず不可能だったりします。
測定誤差などありますから。

制度的に意味のある小数以外で丸め誤差が重要となるケースは世間にはあまり転がっていない気がしますが?

具体的にDecimalでなければならない実例を挙げていただければ議論も進みましょう。
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-11-21 22:30
引用:

さて、実数を完璧に表現する?ことは十進数二進数にかかわらず不可能だったりします。
測定誤差などありますから。



補足しておきましょう。

1/3は実数ですが三進数かその倍数進数以外では完全に表現(小数表記)ができません。

二進数での小数表記はたまたま十進数の小数で完全に表現できたりします。

なぜたまたま十進数の小数で完全に表現できたりするのか。。。。。

そういう部分も考察して、Decimalの利用価値を語っていただければ幸いです。
未記入
大ベテラン
会議室デビュー日: 2005/03/12
投稿数: 148
投稿日時: 2005-11-21 22:57
> 皆さんわざとですか?
わざとだろうね。

先に言っておくが
浮動小数点の仕組みを知ることは悪いことだとは
俺は言っていない。

俺は手計算で4.9を浮動小数点に変換したところで
解決までの道のりが急がば回れになるとは思えんけど
教えないのがIT技術者のやさしさなんだよ。

googleで
 浮動小数点 丸め誤差 情報落ち 桁落ち 打ち切り誤差 有効桁数
とか調べれば結構情報あるので困らないし十分理解も出来る。
俺は手計算でIEEE754変換、逆変換できないし、する気にもならん。

質問者には適当に面倒なことさせて回答したことにして
回答者同士で間違い指摘するのが楽しい。

[ メッセージ編集済み 編集者: 未記入 編集日時 2005-11-21 22:59 ]

スキルアップ/キャリアアップ(JOB@IT)