プログラミングの為の数学と算数 vol.2at TECHプログラミングの為の数学と算数 vol.2 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト425:デフォルトの名無しさん 06/03/10 00:11:33 0.5足して切り捨てしちゃ駄目? 426:423 06/03/10 01:16:10 >>425 画像処理で使用するため浮動小数点は、できるだけ使用しないようにしています。 ちなみにバージョンA,Bともに四捨五入をするときは ret = (a / b) + 0.5 = (a / b) + (1 / 2) = (2 * a + b) / (2 * b) ←通分(だったっけ?) のように0.5を足すようにしています。 427:423 06/03/10 01:32:01 ちょっと言葉足らずだったので補足を・・・ 単純に0.5を足して切り捨てると除算結果が負数の場合に問題があるのです。 (たとえば、結果が-2のときは -2.0+0.5 → -1.5 → -1になってしまう) そのためにバージョンAでは、除算の結果が正負で場合わけをして +0.5か-0.5を切り分けることにしました。 428:デフォルトの名無しさん 06/03/10 02:46:54 >画像処理で使用するため浮動小数点は、できるだけ使用しないように そもそもここに間違いがあると思うだけどな 429:デフォルトの名無しさん 06/03/10 11:44:35 >424 方法はそれしかない。可搬性を確保したい場合符号チェックは必然。 挙げられた例題は結果の精度として整数値しか必要でない (小数点以下0ビットの精度)場合の固定小数点演算と看做すことができる。 固定小数点演算とは例えば小数点以下に2ビットの精度が必要な場合に 3ビット下駄を履かせて1→8、0.5→4とするなどして整数演算によって 一定精度の実数演算を行う方法だ。 その場合結局四捨五入の処理も必要になる。 最下位ビットが0か1かを決めるために剰余を使うのもまさに例題と同じだ。 (固定小数点演算という枠組みで考える理由は精度が異なる場合も 同じ考え方で統一的に考えられるというだけだ。) そして符号の処理も結局必要になる。 ただ、符号付整数除算のハードウェア仕様としてはAもBもありえて、 ハードウェアの仕様を調べてそれに依存するなら処理を省略できる可能性はある。 通常の整数は2の補数表示をすることで正数に対する処理を転用して 負数を扱っているで0に対して表現が元々対称でない。 だからBバージョンが目当てなら見込みは割とある。 ハードウェアに依存しちゃうけどね。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch