2007-05-01から1ヶ月間の記事一覧

1500

走行距離 1.5km 実時間 5分31秒 走行時間 5分31秒 平均速度 16.3km/h 3週間前に走って5分55秒で、 これはひどいと思ったが、 最近スピード練習していて、 そろそろ自己ベストが出るのではと思って、 3週間ぶりに走ってみた。 2年前の自己ベストを3秒更新した…

10進/16進変換?

最近、よくバイナリファイルをバイナリエディタで見る。 しかし、例えば 22 01 00 00となっていても、これが10進でいくつになるかすぐにはわからないだろう。 そこで、次のような関数を作る。 int dec2hex(int x) { int y = 0; int h = 1; while(x != 0) { i…

整数の四則演算(2)

シフト演算 // 382ms for(var i = 0; i 4 >> 1; }加算と同等。 除算 // 481ms for(var i = 0; i 4 / 2; }整数の範囲を外れてても同等。 // 473ms for(var i = 0; i 12345678900 / 3456789; }結果が64ビット整数の範囲を超えると遅くなる。 // 780ms for(var …

整数の四則演算(1)

基本的なところをおさえておく。 JScript5.6で、 いずれも100万回繰り返す。 ループ // 281ms for(var i = 0; i ; } 加算 // 375ms for(var i = 0; i 1 + 1; } // 384ms for(var i = 0; i 99999999 + 100000000; } // 401ms for(var i = 0; i 100000000 + 10…

多倍長整数の計算(5)

自乗の計算は、異なる積よりも速い。 f(x) = a0 + a1x + a0x2 + ... f(x)2 = a02 + 2a0a1x + ( 2a0a2 + a12)x2 + ... ほとんどの場合で同じ乗算が2回行われる。 自乗にすると、8秒と1/2になった。

多倍長整数の計算(4)

繰り上がりの処理が楽になると、 繰り上がり計算を毎回しなくても済むようになる。 1万以上になると、すなわち加算すると、 ほぼ毎回繰り上がり計算をしていたが、 整数は21億ちょっとまであるはずなので(確かめていない)、 20億以上になってはじめて繰り…

多倍長整数の計算(3)

前回の関数は、改良して、70秒→48秒となった。 前回は、被乗数を下の桁から順に計算したが、 今回は積を下の桁から計算する。 そうすると、場合わけが少しややこしいが、 繰り上がりの処理が少し楽になる。 42秒となった。

多倍長整数の計算(2)

タイトル変えた。 1は前日の記事ということで。2乗していったほうが速いだろうということでその関数を作ってみた。 今度は4桁で区切って計算している。 var NFIGURE = 4; var INT_MAX = Math.round(Math.pow(10, NFIGURE));function multiple(x, y) { var z …

Ackermann関数(2)

265536を計算することを考える。 次々と2乗していけばいいのだが、 プログラムとしては2倍するほうがずっと簡単。 時間はかかるが、1を65536回2倍する。 function twice(x) { var length = x.length; var y = 0; // 繰り上がり for(var i = 0; i var a = x[i…

Ackermann関数(1)

最近、これを読んでいる。計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)作者: 高橋正子出版社/メーカー: 近代科学社発売日: 1991/08/01メディア: 単行本購入: 8人 クリック: 160回この商品を含むブログ (36件) を見るこの中でアッカーマ…