2分割
数学では、2または半分 にすることにより部門はまた、 調停やdimidiationと呼ばれてきました。これを他の数による乗算および除算とは異なる演算として扱うことは、古代エジプト人にまで遡ります。 16世紀後半の一部の数学者は、半分を別の操作と見なし続けており、現代のコンピュータープログラミングでは多くの場合、別々に扱われ続けています。この操作の実行は、10進数演算、コンピュータープログラミングで使用される2進数システム、およびその他の偶数ベースで簡単です。
バイナリ
2進算術では、2による除算は、数値を1桁右にシフトするビットシフト演算によって実行できます。これは、強度削減の最適化の形式です。たとえば、1桁右にシフトした2進数の1101001(10進数の105)は110100(10進数の52)です。最下位ビットの1は削除されます。同様に、2 kの任意の累乗による除算は、 k位置を右シフトすることで実行できます。多くの場合、ビットシフトは除算よりもはるかに高速な演算であるため、この方法で除算をシフトに置き換えることは、プログラムの最適化に役立つステップです。ただし、ソフトウェアの移植性と読みやすさのために、多くの場合、除算演算を使用してプログラムを記述し、この置換を実行するためにコンパイラを信頼することが最善です。 Common Lispの例:
ただし、上記のステートメントは、符号付き2進数の除算を扱う場合には必ずしも当てはまりません。 1ビット右にシフトすると2で除算され、常に切り捨てられます。ただし、一部の言語では、符号付き2進数の除算は0に丸められます(結果が負の場合、切り上げられることを意味します)。たとえば、Javaはそのような言語の1つです。Javaでは、-3 / 2は-1に評価されますが、-3 >> 1は-2に評価されます。したがって、この場合、コンパイラは 、被除数が負になる可能性がある場合に、ビットシフトに置き換えることで2による除算を最適化できません 。
バイナリ浮動小数点
2進浮動小数点演算では、指数を1減らすことで2による除算を実行できます(結果が非正規数でない限り)。多くのプログラミング言語は、浮動小数点数を2の累乗で除算するために使用できる関数を提供します。たとえば、Javaプログラミング言語は2の累乗でスケーリングするためのメソッドjava.lang.Math.scalbを提供し、Cプログラミング言語は同じ目的で関数ldexpを提供します。
小数
次のアルゴリズムは10進数用です。ただし、偶数ベースで任意の数Nの半分を取得するためのアルゴリズムを構築するモデルとして使用できます。
- Nを書き、その左にゼロを置きます。
- 重複するペアでNの数字を調べ 、次の表の結果の数字を書き留めます。
最初の数字が | でも | でも | でも | でも | でも | 奇数 | 奇数 | 奇数 | 奇数 | 奇数 |
---|---|---|---|---|---|---|---|---|---|---|
そして2桁目は | 0または1 | 2または3 | 4または5 | 6または7 | 8または9 | 0または1 | 2または3 | 4または5 | 6または7 | 8または9 |
書く | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
例:1738/2 =?
01738を書きます。結果の検索に取り掛かります。
- 01:偶数桁の後に1が続く、0を書き込む。
- 17:奇数桁の後に7、8を書き込む。
- 73:奇数桁の後に3、6を書き込む。
- 38:奇数桁の後に8、9を書き込む。
結果:0869。
例から、0が偶数であることがわかります。
Nの最後の桁が奇数の場合、結果に0.5を加算する必要があります。