【お知らせ】プログラミング記事の投稿はQiitaに移行しました。引き続き整数の割り算を掛け算に変換する方法について考えます。【注】第2回までの計算は不完全なため誤差が出ます。第3回で誤差を補正します。ため、計算対象を16bit符号なし整数型に限定します。32767)場合、商は0か1で、単純な大小比較で求まります。これは掛け算よりも高速です。そのため対象から除外します。カウント第1回は以下の式で計算しました。うち、この計算方法で誤差がない除数を数えます。(0%)これは酷いです。正常に通った被除数は1と2の累乗だけです。1は計算不要、2の累乗はシフトで計算可能のため、まったく意味がありません。(1)乗数を求めるとき切り上げるよう変更します。(0%)まったく精度が向上しません。精度を上げる今は積の上位16bitを取っているだけです。除数が2以上の自然数の場合、商は被除数よりも小さくなります。減少した桁数は上位16bitの中で使われることはないため、乗数を大きくすれば有効活用できそうです。2の累乗を基準にすると2進数での最大桁数が判別できます。ため、その間の9~15での除算は8を基準にすると最小でも3桁は減少します。これは被除数を2進数で表記したときの桁数そのものです。(0%)まったく精度が向上しません。(2)再度、切り上げるよう変更します。(76%)劇的に精度が向上しました。計算結果が正しいかどうか総当りで検算しましたが、かなり時間が掛かります。掛け算を行っているため、誤差は被除数に比例して拡大します。対象となる型での最大の割り切れる数と、その直前の数だけを検算すれば確認できます。0;}かなり高速化しました。チェック結果が総当りと一致することを確認しました。残念ながらまだ残り半分の除数が正常に計算できません。(2)Tweet広告を非表示にする関連記事2013-06-30i8086のインタプリタでMINIXのコマンドを動かすi8086の逆アセンブラに引き続きインタプリタを実装して、MINIX...2013-05-28Node.jsでJIT今までPythonやC#でJITを実装しました。(3)引き続き整数の割り算を掛け算に変換する方法について考えます。(1)はてなブログをはじめよう!n7shiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。