1 名前:デフォルトの名無しさん [2006/09/16(土) 09:46:26 ] 前スレ ビット演算 pc8.2ch.net/test/read.cgi/tech/1123918075/ 関連スレ アセンブラ… (゜□゜) ↑アッー!↓ pc8.2ch.net/test/read.cgi/tech/1148402614/ 関連情報 Hacker's Delight ttp://www.hackersdelight.org/ ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか ttp://www.amazon.co.jp/exec/obidos/ASIN/4434046683 ビットを数える・探すアルゴリズム ttp://www.nminoru.jp/~nminoru/programming/bitcount.html Bitboard ttp://en.wikipedia.org/wiki/Bitboard
720 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:56:44 ] もしかしたらループ回数が32かいを超えたら・・・ どうするの?
721 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:21:14 ] >>720 普通にカウントしろよw
722 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 11:54:06 ] 正直別にどうでもいい 泣くしかない
723 名前:デフォルトの名無しさん [2008/06/25(水) 13:20:16 ] 0xC89664 の1バイト目・2バイト目の値を求める方法をお願いします。
724 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 13:24:45 ] >>723 貴方の小人は頭から食べるのですか? お尻から食べるのですか? www.aozora.gr.jp/cards/000912/files/4673_9768.html
725 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:29:14 ] 囲碁(9路盤)のbitboardを作ろうとしています。 9x9なのでSSE2使えば128ビットレジスタ一個に収まるのでかなりの高速化が出来ると思っています。 囲碁のルールに上下左右を全て囲まれた石の塊は盤から取り除かれるというのがありますが、 これを高速に行うにはどうしたらよいでしょうか。 問題はSSE2は128ビットを一塊としたシフトが行えないことで、これのせいでどうしたらよいかわからなくなっています。 よろしくお願いします。
726 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:48:23 ] モンテカルロ木の実験ですか?
727 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:02:15 ] >>726 そうです。 モンテカルロはスピード命らしいので、SSEを使えないかと思っています。
728 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 21:11:08 ] 左シフトなら paddq である程度代用出来るだろ
729 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 21:49:09 ] paddqって64ビットの境目で切れ目が出来てしまいませんか。
730 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 21:53:24 ] 128ビット丸々だとバイト単位の命令しかないからねぇ。 x64環境を使っていいのならビット単位をやめてバイト単位にして 16本のXMMレジスタを9本使って9x9にした方がいいんじゃないかな?
731 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 22:23:24 ] それならビット単位でshort[9]でもよさそうですが、 バイト単位にしたほうが有利なんですか?
732 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 23:18:33 ] ビット単位で操作できないから困ってたんじゃなかったの?
733 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 06:48:29 ] レジスタを9本も使うなら32ビットのレジスタでも9x9の盤は収まってしまいます。 その場合、ビット単位の操作は可能です。 x64でレジスタが16本あったとしても通常のレジスタを9本も占めるというのは考えにくいですが、 XMMレジスタなら9本使っても支障ないということでしょうか?
734 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 09:01:44 ] >>729 最大9bitしかシフトしないでしょ? なら 境界にデータを置かなければいいでしょ あるいは16bitを1列にしてレジスタ2つにしたらどう?
735 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 10:08:36 ] >>733 x64で汎用レジスタが増えたとはいえ9本も使えばループや分岐に支障が出ると思うよ。 その点XMMレジスタなら浮動小数点演算しなければ基本的に空いてる。
736 名前:725 mailto:sage [2008/06/26(木) 19:15:01 ] 725です。 すいません。 皆さんにレスしていただいておいて申し訳ないのですが、 高速化について調べていたらGPGPUというのが見つかりました。 グラボに計算をさせるというものなのですが、上手くツボにはまれば CPUの何十倍もの速度がでるそうです。 囲碁がはたしてグラボに計算させるのに向いてるのかどうかわかりませんが、 SSEは一旦忘れて、GPGPUについて調べてみようと思います。 グラボも3〜4万だせば結構いいのが買えるみたいです。 とりあえずGPGPUスレとCUDAスレにいって雰囲気つかんできます。 皆さんのレスには感謝しています。 失礼しました。
737 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 19:47:50 ] そっち行ってもいいならFPGAっていうテもあるかもしれん。
738 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 21:47:07 ] 5年ほど前にFPGAでオセロの石を返す部分を作ったが 普通にCPUで計算するより遅かった
739 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 22:43:05 ] >>736 CUDAするなら前もって、GPUに計算させたい部分 設計しておけ わしは今日から3日でモンテカルロをCUDAで解けるように 勉強する
740 名前:725 mailto:sage [2008/06/27(金) 00:03:02 ] >>739 どもです。 ところで最新ハイエンドGPUはピーク性能1TFLOPS超えるらしいですね。 HDDもテラバイトの物が出てるし、時代はもうテラなんですねぇ。
741 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:18:19 ] >>740 Radeon HD3870とGeforce9800GTXもってるけど 両方とも労せず2000スレッド以上生成して並列に計算できるよ
742 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:32:16 ] >>725 一命令ではできないが,シフトしたいビット数を n として n/8 と n%8 とに分けてシフト命令使って後で合成すれば可能
743 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 04:00:39 ] >>738 enumの様に贅沢にintを丸々一つ石に配分した方が良かったかもしれないね。
744 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 07:18:19 ] ベクトル演算を利用するなら 閉曲線の内側か外側の判定で巻付判定法を応用するといいように思うな ビット演算じゃないけど
745 名前:デフォルトの名無しさん [2008/07/11(金) 01:01:51 ] あげ
746 名前:デフォルトの名無しさん [2008/07/20(日) 15:56:27 ] う
747 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 20:41:05 ] 今どきビット演算で高速化とかw
748 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 23:07:22 ] プログラミングマニュアル1・基本仕様ガイド の ・式 ってとこに詳しく書いてるだろ...読みもしないで不思議とか言うな
749 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 23:07:59 ] 誤爆すいません
750 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 10:17:23 ] こやつめ!
751 名前:デフォルトの名無しさん [2008/08/01(金) 03:07:44 ] 2^a を渡されたときaを求める方法で何かいい物はありませんか? なるべくループやlogを使わない物がいいです
752 名前:750 mailto:sage [2008/08/01(金) 03:26:58 ] >>751 追記、1≦a≦9
753 名前:デフォルトの名無しさん [2008/08/01(金) 03:27:44 ] >>752 自分の名前間違えた>>750 じゃなくて>>751
754 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:04:46 ] 513個の配列持って、その中に1〜9を入れておく。[1]=なし、[2]=1、[3]=なし、[4]=2、・・・ [512]=9 演算はこれが最速。
755 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:06:47 ] サイズが問題なら、 if( n & 0x200 ) return 9; if( n & 0x100 ) return 8; ・・・ if( n & 0x002 ) return 1;
756 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:15:16 ] x86ならBSF
757 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:39:50 ] char bit[256] = {1,2,0,3,0,0,0,4, 略 }; bsf(int n) { int r; if ((r = bit[n&255])) return r; n >>= 8; if ((r = bit[n&255])) return r + 8; n >>= 8; if ((r = bit[n&255])) return r + 16; n >>= 8; if ((r = bit[n&255])) return r + 24; return 0; //解なし }
758 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:41:33 ] こんなのどうよ? bsf(bits){ bits-=1; int num; num = (bits >> 1) & 03333333333; num = bits - num - ((num >> 1) & 03333333333); num = ((num + (num >> 3)) & 0707070707) % 077; return num; }
759 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:52:26 ] >>754-758 ありがとうございます。みんなカッコイイ
760 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 05:52:52 ] >>757 は char bit[256] = { 0,1,2,0,3,0,0,0, 4,0,0,0,0,0,0,0, 略 }; の間違いだった。 んで結果を-1すれば合うんじゃないかな。
761 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 06:23:57 ] こんなんでどよ int f(unsigned n){ int a=1; unsigned b; n>>=2; b = n>>4 ;if(b)a+=4,n=b; b = n>>2 ;if(b)a+=2,n=b; return a+n; }
762 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 10:45:43 ] "_\0\5\1\10\6\2__\4\7_\3"[n*0xCA030FF>>28 ];
763 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 14:50:59 ] お前頭いいなー、でも "_\1\6\2\011\7\3__\5\010_\4" じゃないか もう少し小さいハッシュもあった "\1\2\3\010\6\4\011__\7\5"[n*0x5300000>>28 ];
764 名前:762 mailto:sage [2008/08/01(金) 16:32:34 ] あー間違えてたーthx そしてそっちのハッシュのほうが優れているね。
765 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 16:55:45 ] なるほど、ハッシュってそういう使い方するんだ。
766 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 17:47:48 ] >>762-763 異次元過ぎてついて行けないのだが解説頼む
767 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 21:25:31 ] 俺もわかってないが gperfとかで完全ハッシュ関数を作るのと同じように (文字列ではなく)特定の数字から対応する特定の数値への完全ハッシュ関数を作っているんだと思う。 どうやって導いたかなんて知らん。
768 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 01:40:13 ] へええ 左シフトしたときに あるビット範囲(この例だと28ビット目から31ビット目)が シフト回数ごとにバラけるようにしているのか シフト回数 (n*0x5300000)のbit28〜31の値 1 0 2 1 3 2 4 5 5 10 6 4 7 9 8 3 9 6 んで配列テーブルをlookupすると。 完全ハッシュ関数って、元が異なれば必ず先が異なる関数のことだっけ。 じゃないとこれ使えないよな。 小さいというのは先の範囲、つまり今回は28〜31の4ビットのことか。 確かに小さいほうがメモリとキャッシュに優しいですな。 という感じであってますか。 >どうやって導いたかなんて知らん。 俺も知りたい。
769 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 01:52:05 ] 頭良すぎる
770 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 01:56:27 ] 2chってすげーな
771 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:03:58 ] ビット演算ってたしかにすごいけど、 ソースに組み込むときは、その演算の意味とメリットなど ビット演算を導入した経緯や思想も書いてほしい・・・ ソース理解に時間がかかったり、修正が大変・・・ まあ、俺がお馬鹿なのかもしれないけど。 あと、763って751からの流れなんですか? それとも別の流れ?
772 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:14:13 ] 最後の2行から見ても明らかに >まあ、俺がお馬鹿なのかもしれないけど。 が正解。
773 名前:デフォルトの名無しさん [2008/08/02(土) 10:17:05 ] このスレって頭のいい奴もいるけど、 771みたいなバカもいる。 バカはROMっていろ!死ね771!!
774 名前:それは俺か (w mailto:sage [2008/08/02(土) 10:59:13 ] まあ、バカにレスする奴はもっとバカだけどな。
775 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:02:09 ] 1、2、4、8、16、32、64、128、256、512の完全最小ハッシュ値を作る。 ttp://www.ic-net.or.jp/home/takaken/nt/slide/hash.html これか? >>762 は本当に頭がいい。>>763 の書き込みがなかったら 意味も解らずスルーするところだった。
776 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:58:48 ] 512の完全ハッシュを作ってそれを1〜9のテーブルに掛けるって事? 分かった気がする。
777 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 13:59:12 ] >>775 でも、保守する奴が >>762 みたいに頭いいとは限らんから、 仕事のプログラムなら >>754-755 あたりのほうがいいと思う。
778 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:04:14 ] 当たり前。こんなのは所詮パズル。商用コードでこんなの書けない。 >>762 みたいなのが許されるのは趣味のプログラミングだけだよ。
779 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:19:14 ] 後は極端に処理速度がネックになってるところとか、 ビックリするほど容量が無いプラットフォームとか、 コンパイラが準備されてなくてアセンブラで書かなきゃいけないような場合、 更にRISCみたいに見た目と実行順が違うような環境だと 読む量が少ない短いコードが逆に役に立つ。 自慢を理由に書くと間違いなく死を招く。
780 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:20:19 ] コメントで書いておけば十分じゃないかな。 今でもまだまだ、速度やサイズ重視の分野はあるし。だいぶ少なくはなっているけど。
781 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:32:12 ] 現状、用途として大きそうなのはシェーダー周りか。
782 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:36:45 ] 画像処理ならいくらでも速度欲しいけどな
783 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:49:03 ] 昔、VUアセンブラの実装をしたが、ライブラリの増加により俺の約700byteのプログラムが 入らなくなり削りに削って「400byteだけ下さい!」と上司に嘆願したのは懐かしい思い出。
784 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 18:57:37 ] >>777 それは同意だけど、 >>762 のエッセンスを抜き出して、わかりやすくすれば いいんじゃないかな おそらく、2^a を掛けると aビット左シフトする、というのは誰にも自明だけど 1〜9の値にマップするマジック定数がややトリッキーかと なら、見た目にわかりやすいようシフト数を4倍にして、(ついでに右シフトにして) こんな感じでどうだろうかね(64ビット整数が使えることが前提だけど^^) /* assume that n is 2^a (1<=a<=9) */ return (0x9876543210LL / ( n * n * n * n )) & 0xf;
785 名前:デフォルトの名無しさん [2008/08/03(日) 02:24:01 ] 一番右の1を探すとき~a&(a-1)でできますよね、じゃあ一番左の1を探すときは何かありませんか?
786 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 02:37:33 ] 掛け算が4回・割り算が1回ってのが、演算量的に・・・ 俺が8bitに慣れてるからかな? 64bit整数があるにしても、nが32bitならn*nで64bitでしょ。中間結果でbitが失われるんじゃ?
787 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 02:40:55 ] >>785 754とか755じゃダメなの?もっと速い/小さいのってこと?
788 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 02:55:56 ] >>785 関係ないがa&(-a)で右端の一ビットを得られるぞ、左端は無理じゃないか
789 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:17:47 ] www.nminoru.jp/~nminoru/programming/bitcount.html
790 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:41:51 ] >>787-789 どうもです、今見た資料に左端を操作する命令列は存在しないって書いてあったorz
791 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:56:21 ] 左右反転するビット演算子でもあればね
792 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:59:50 ] a = ( ( a >> 16 ) & 0x0000ffff ) | ( ( a << 16 ) & 0xffff0000 ); a = ( ( a >> 8 ) & 0x00ff00ff ) | ( ( a << 8 ) & 0xff00ff00 ); a = ( ( a >> 4 ) & 0x0f0f0f0f ) | ( ( a << 4 ) & 0xf0f0f0f0 ); a = ( ( a >> 2 ) & 0x33333333 ) | ( ( a << 2 ) & 0xCCCCCCCC ); a = ( ( a >> 1 ) & 0x55555555 ) | ( ( a << 1 ) & 0xAAAAAAAA );
793 名前:784 mailto:sage [2008/08/03(日) 17:00:12 ] >>786 もちろん変数n は64ビット長 LP64なら long型だと思ってもらえばいいです 演算量については、いまどきの投機実行するCPUなら 下手に条件判定入るよりは速いと思うけど、・・・まあ状況次第ですね
794 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 17:25:07 ] nが64bitでも、n*n*n*n の中間結果はbit失われるでそ。
795 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 18:31:31 ] でも、仕事に使うとなると、 「シンプルにしようや」 で終わってしまうんですよね〜 そうすると、754や755に落ち着くのかな・・・
796 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 19:39:21 ] そりゃそうだよ。 よほど特段の理由が無い限り、シンプルが一番。
797 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 19:51:28 ] 裸が一番いいのと一緒だ
798 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:10:39 ] >>794 2^9まででしょ?
799 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:12:54 ] は?
800 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:51:46 ] 0x1 * 0x1 => 1 0x3 * 0x3 => 9 0x7 * 0x7 => 0x31 0xf * 0xf => 0xe1 0xff * 0xff => 0xfe01 0xfff * 0xfff => 0xffe001 0xffff * 0xffff => 0xfffe0001 0xfffff * 0xfffff => 0xffffe00001 これに規則性みたいなものを感じるんですが、 何か法則があるんでしょうか?
801 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:54:51 ] 初めの3つはともかく、 9*9=81 99*99=9801 999*999=998001 と同じようなもんだろ
802 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:06:41 ] よくわからんが、ビット演算とかって、日本人よりも インド人のほうが面白い発想しそうだね
803 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:09:36 ] >>800-801 2進数に考えれば、最初から綺麗に並ぶよ。 1 * 1 = 1 11 * 11 = 1001 111 * 111 = 11001 1111 * 1111 = 11100001 11111 * 1111 = 1111000001
804 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:16:49 ] 0xffff * 0x10000 => 0xffff0000 0xffff0000 - 0xffff => 0xfffe0001 特に面白い事実はなさそうだが
805 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:21:59 ] 99*99=9801 これが国民機ナンバーの正体かー すると8801は? 93.8136 * 93.8136 = 8800.99 収束しないのか
806 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:22:36 ] 収束?
807 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:25:25 ] ごめん適当言った
808 名前:デフォルトの名無しさん [2008/08/03(日) 22:34:48 ] 無理数ね。
809 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:10:51 ] λ... PC-8001, PC8201, PC-6001, &c. ...
810 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:48:03 ] 獣の数字にまつわる屁理屈と同じようなもんだな あえて8801に意味を見出すなら99*99-1100とかなんとか
811 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:49:53 ] 9801-1100 = 8701だな 俺頭大丈夫k
812 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 00:08:26 ] PC9801が長いこと繁栄したのは99*99=9801 こういった力(ちから)を持つ数字が隠されていた影響に違いない。 その証拠に型番が9821に変わろうとしたとたん没落した。 きっと9801のままなら永遠の存在だったんだよ。
813 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 00:11:55 ] >>798 そうか、9bitのハッシュのエレガントな解法だったのね。ごめん。 ハッシュって、必要の都度、bit数見極めて作らなきゃいけないんだな・・・
814 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 01:24:27 ] 実際に仕事でも使用可能な、 1.実用性がある 2.比較的わかりやすい ビット演算のアルゴリズムって何だろうね・・・
815 名前:デフォルトの名無しさん [2008/08/04(月) 01:50:11 ] 名前がつくぐらい有名になればいいんじゃないかな。 例えばコメントに // 762氏ハッシュ とか書けるぐらいに。
816 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 01:56:23 ] すみません、 >"\1\2\3\010\6\4\011__\7\5"[n*0x5300000>>28 ]; の頭の"\1\2\3\010\6\4\011__\7\5"がいまいち良くわかりません。
817 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 02:06:28 ] ただの文字列リテラルだよ
818 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 02:06:59 ] コメントに、「ハッシュがどうの」なんて書く奴ばっかだからダメなんだよ。 コメントに絶対に書かなきゃいけないのは、>>751-752 だよ。 どういう実装をしたかのコメントなんて二の次三の次。 それなのに仕様のコメントを怠ったままで「すげーテクニック使ってるんだぜ」的なコメントを残しても意味なし。 そんなものを残すぐらいなら、(最低限の>>751-752 の他に)assertでも使った範囲チェック入れとけ。 もちろん、>>762 のやり方に対するコメント(完全ハッシュ関数とテーブル)はあった方が良い。 けど、仕様についてのコメントの方がはるかに重要。
819 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 03:06:57 ] 日本語でおk
820 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 03:45:03 ] 日本人でおk