- - PR -
丸め誤差の対応について、皆様どうしていますか?
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-03 10:36
どもでふ。がるです。
元データが小数込みなら、おそらく「小数の丸めに関する設計」とか あると思うのですが。 その辺、ここで聞く前に、ちゃんと客先に確認したほうがよいですよ :-P ちなみに*10で/10は、小数の桁数限界がはっきりしていてかつ さほど無茶なものでなければ、下手に小数同士で四則演算するよりは 大分と誤差を回避できるかと思います。 飽く迄「大分」って程度ですが。 # 浮動小数点計算用ライブラリとか…作るのはやめましょう。大変です;; | ||||||||||||
|
投稿日時: 2005-06-03 10:45
仰ることはわかるのですが、これだけではないと思いますよ。 例えば、円周を求める際14m(半径)×2×3.14を計算して、87.92mと結果を 出したとします。これは電卓で計算しても、紙の上で計算しても同じ値で しょう。でも、これ誤差無いですか?もともと3.14自体に誤差が含まれる わけですね。 要するに、誤差というのは理論レベルで発生してる(考慮する)誤差と 計算上(今のコンピュータで浮動小数点演算を扱う以上必ず発生する) の誤差とをはっきり区別して考えないといけないわけです。 で、最終的にはそれをどう扱うか?ということが仕様として、どこで四 捨五入するか、切り捨てるのか、切り上げるのか、銀行型まるめを行う のか、電卓と同じ丸めにするのか...が決められます。 (技術計算では誤差は誤差として別途計算するのが普通ですけどね。) 最後に、その仕様を実現する為にどういうコーディングを行うのかと いうことで言語によって標準で用意されているRoundUp等が銀行型まる めになっている場合もあるので、違う処理を考える必要が出るわけです。 この「誤差」というものとコンピュータ内で、7908.499999999999のように 格納されるという誤差は別物として扱わないといけないと思いますがね。 (影響されるので厄介ですが...) | ||||||||||||
|
投稿日時: 2005-06-03 11:08
には同意しておきますが、
にはネタツッコミ。 πが3.14なんとかなのは承知の上でも、「3.14」で計算してその結果に誤差がありますよね、と言う論は余り有意義じゃない気がします。コンピュータの演算に限らず。 πなどの定数は(むろん手で計算しても)細々した数字が出てきて困るかもしれませんが、どこの桁数まで使って計算するかは、それこそ他の数字の有効桁数と併せて考えるべき物です。 (適当に検索して引っ張ってきたのであれですが) http://www2.tokyo-ct.ac.jp/users/m/matsu/essentialFigure/essentialFigure.html
プログラミング言語上の話であっても、定数PIは必要十分な桁数を持って定義されている物として扱い、計算結果をどこで打ち切る(丸める)かは、やっぱり要件にかかってくる気がします。 ※あくまでπを使った話としてのネタです。 | ||||||||||||
|
投稿日時: 2005-06-03 13:59
皆様、多くのご返事をありがとうございました。
小数点を含む部分について、 BigDecimalへ書き換えることになりそうです。 要件は小数点2位までの数×整数(または小数点2位までの数)を 電卓のような四捨五入して整数へ丸めることです。 今回、数字をいじくることにこだわったのは、 ただ個人的に気になったからというだけです。 当方の勉強不足に付き合っていただき、 本当に助かりました。 | ||||||||||||
|
投稿日時: 2005-06-03 22:02
雑談です。
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-06-03 22:05 ] |
«前のページへ
1|2|3