- - PR -
490/4.9=99.99999
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-20 21:48
ほぼ全ての言語でそうなってる筈ですよ? JIS,ISO,IEEE方式の四捨五入って 四捨五入する桁以下が5ちょうどの場合は前の桁が偶数になるように丸める って規定されてるので ちなみに、論点に関してはずれてませんよ 2進数に手で変換してみりゃ分かりますが・・・・ 二進数で、表現できる一番近い値=四捨五入した値で計算が行われてるだけです。 四捨五入って処理をするとちょっと大きいか、ちょっと小さい結果が返るものですよね? だから、490をちょっと超えた値と、100にちょっと足りない値が帰って来てますね 切捨てって処理をやったら、本当の結果より小さい値になることが保証されますよね? 実際にそうなっていませんか? 有効桁の件は、勝手に決めればいい話です。 そもそも有効桁ってそういうもんです。 まぁ、Doubleを使うなら15桁程度ですけど ただ、切捨て処理をした後に有効桁がどうのって言われても この辺は今までの回答者の方は常識として扱われたのではないでしょうか? | ||||||||||||||||
|
投稿日時: 2005-11-20 22:08
当たり前でしょう。
「目的に応じて」とは何人もの方が指摘しています。 コンピューターは、実数を完璧に扱うことはできません。 有効桁数を意識しない小数の取扱なんぞ、最初から無意味ですよ。 それがいやなら、二進化十進表現を使えばいいのです。 こっちなら、少なくとも電卓と同じ感覚で使えるでしょう。
siopさんが、「2進数の小数が10進数の小数と同じように振る舞ってくれない」と だだをこねてるだけです。 この場合の「十進数」も、人間の扱えるそれと、コンピューターの扱えるそれは違いがあますよ。
一生に一回でいいから、やってごらんなさい。 おそらく、siopさんは、「二進化十進表現」の意味を、理解していなんでしょう。 [ メッセージ編集済み 編集者: さいくろう 編集日時 2005-11-20 22:35 ] | ||||||||||||||||
|
投稿日時: 2005-11-20 22:26
何が何でもsiop氏に2進数で4.9を表現させようとするやつが沸いてくるなあ。
IEEE754で4.9を正確に表現できないってことはもうわかってるだろうに。 進化十進表現?電卓と同じ感覚? 中の仕組みなんて知らなくていいんだよ。 | ||||||||||||||||
|
投稿日時: 2005-11-20 22:33
わからなければ、それでオシマイ、というのも手でしょうよ。 技術者として恥ずかしくないんならね。 それだけのハナシ。 ちなみに、「490」は「490」以外の何物でもないよ。 二進数表現は、十進数の整数を表現する場合、誤差は生じないからね。 [ メッセージ編集済み 編集者: さいくろう 編集日時 2005-11-20 22:34 ] | ||||||||||||||||
|
投稿日時: 2005-11-20 22:46
当たり前とかほかの人も指摘しているとか
IEEE754やDecimalの中身知らないと恥ずかしいとか 一生に一回でいいからとか 役にたたねえ回答だな。 回答者って質問者に回りくどいことさせたがるんだよな。 | ||||||||||||||||
|
投稿日時: 2005-11-20 22:59
まるでチャットだな。
片棒を担いでいるのは自分だけどね。 「急がば回れ」っていうでしょ。 手順を踏めば、必要なものがちゃんと手にはいるんだよ。 この掲示板には、気色が悪いくらい優しい人がそろってるし。 「わからない」ということを、どう扱うか。 まあ、人それぞれだ。 | ||||||||||||||||
|
投稿日時: 2005-11-20 23:03
どういう計算をしなければならず、どれくらいの数値を扱って、何桁の有効数字がほしいから、その範囲の数値を扱える型は何か、、、という、型選びを間違えている。 単に実数を扱うから double を選んだ、という感じがする。
有効(必要)桁数の一つ下[編集]必要桁数より下[/編集]で、どのような値が欲しいかで決めます。 計算結果より小さい値が欲しいなら切り捨て。計算結果より大きい値が欲しいなら切り上げ。より近い値が欲しいなら四捨五入(または偶数丸め)。 というように、必要に応じて最適なものを選ばなければいけないんだけど、必要なことを明確にせずに「えいや」で決めてしまったように思います。
だから、なぜそうするか、というところを明確にしなければなりません。 たとえば、消費税の処理で、店によって ・すべての商品の元値を足してから、1.05をかける ・すべての商品を1.05倍してから足す と、計算方法が違います。また、1円未満の端数についても、切り捨ての店もあれば、切り上げの店もあり、四捨五入の店もあります。それぞれ目的があって、その計算方法を選んでいます。 ですから、siopさんが、なぜ double で切り捨てを選んだのか、そこが問題です。
問題の根本原因を知っておくことは、損ではないと思います。 2005-11-19 07:51 からは、なぜ 4.9 が2進数で表せないのか、ご存じでないように思います。 逆に、なぜ表せないのか知らないから、「えいや」で選んだのではないでしょうか。 ___________________________________________________________________ □ written by Jitta on 2005/11/20 □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006 _________________ 検索のコツ・質問のコツ [ メッセージ編集済み 編集者: Jitta 編集日時 2005-11-20 23:05 ] | ||||||||||||||||
|
投稿日時: 2005-11-20 23:46
単に答えが欲しいだけなら、OKWEBとかHatenaで充分でしょう。 IT技術者がIT技術者に質問しているので、 IT技術者として常識的である内容についての突っ込みがあっても 当然の結果であるような気がします。 |