タグ

algorithmとcalcに関するkiyo_hikoのブックマーク (2)

  • ロシア農民のかけ算とCPU - NullPointer's

    ロシアの農民のかけ算という、かけ算の方法があるらしい。 たとえば9×12ならば、前の数を半分にしていき、後の数を2倍していく。 9 12 4 24 2 48 1 96前の数が2の倍数になってるものを削除して 9 12 1 96残った後ろの数を足すと 12 + 96 = 108あら不思議、9×12の答えになったよコレ。 このロシアの農民のかけ算が何をしているのか調べてみると 9 * 12 = (4 * 2 + 1) * 12 = (4 * 2 * 12) + 12 = (4 * 24) + 12 = (2 * 48) + 12 = (1 * 96) + 12 = 96 + 12な感じに分配法則やら結合法則やら中学校一年で習うような数学テクを使った計算をルーチン化しているものだった。 2倍や半分はシフト演算でできるし、偶数奇数は最下位ビットを見れば分かるので簡単にプログラミングできそう。Jav

    ロシア農民のかけ算とCPU - NullPointer's
  • 任意精度演算 - Wikipedia

    任意精度演算(にんいせいどえんざん)[1]とは、数値の精度を必要ならいくらでも伸ばしたりできるような演算システム(実際上は利用可能なメモリ容量に制限されるが)による演算である。 多倍長整数(たばいちょうせいすう)などを内部処理に利用し、必要な桁数の浮動小数点計算を行う。固定長の整数や一般的な固定精度の浮動小数点方式は、ハードウェアで高速に処理できるのに対し、任意精度演算はソフトウェアで実装され、重い処理を必要とする。十進の0.1を2進で表現しようとする場合のように、有限の桁数では表現し切れない場合もあることから、2進でなく十進で処理するものや、有理数演算を併用したりもする。 多倍長演算(たばいちょうえんざん)[2]とも言うが、プログラミング言語によっては、多倍長整数 (特に区別する場合は bigint などと言う) の名前が bignum であることもある。 最近のプログラミング言語の中に

    kiyo_hiko
    kiyo_hiko 2012/03/26
    「高級言語で任意精度演算を実現するよりも機械語で実装した方が格段に高速である」
  • 1