城陽人の本棚 このページをアンテナに追加 RSSフィード

2006-04-12 C++で多倍長整数 このエントリーを含むブックマーク

128bitぐらいの整数型が欲しいとかいう話がむっくからありまして、多倍長整数ならBoostにでもあるんじゃねーの?とか思ったらなかった。で、なんかC++の実装ねーかなぁと探したらNTLなんてもんがありました。公式ページ→http://www.shoup.net/ntl/

メモリの許す限り好きなだけ長いbitの整数が扱えるようになる。演算子オーバーロードされてるので通常の四則演算と入出力ストリームとかは普通の整数型と同じように扱える。使うにはライブラリビルドする必要があるので注意。make方法は公式ページ参考。実際に使う場合は、

g++ -o hoge hoge.cpp -I /usr/local/include/NTL -L /usr/local/lib -lntl -lm

てなかんじでライブラリをリンクする必要あり。

あと注意点として代入時の暗黙のキャストは行われるが、コンストラクタでの代入は明示的に変換関数to_ZZ()を呼ぶ必要あり。詳しくは公式ページの説明参照。

でも今回128bit固定なら動的にbitが伸びるような実装はパフォーマンス的にはうれしくない。デフォルトコンストラクタじゃなくbit数の初期値を指定できるコンストラクタZZ(INIT_SIZE_TYPE, long k)もあるのでとりあえず演算中は伸びないようにすることはできるが、どうしても生成はスタックではなくヒープを消費するので乱用すると重そう。コード上でものすごく限定した場所でしか使わないならstaticで確保してしまって生成は1回にするとか。まぁ実際使ってみて速度的にクリティカルなら128bit固定バージョンを自作するしかないかもね。

昨日は新歓の後そのまま研究室で寝たのでなんとなく体がダルイ。まぁ許容範囲内ですが。昼からミーティングでその後授業が2つ。

4,5限ネットワーク演習1。産学連携がどうとかで企業の人も参加するという変な演習。吹田、中ノ島、東京をビデオ会議で3元中継。某予備校なんかでやってるサテライト講義とかいうやつですね。先生が一人で話してるだけなら特に問題ありませんが、重要なことを一つ忘れています...演習です。そこで問題です。

問題:各グループ3名のグループが12個あります。演習は各グループ単位で行いますが、グループは研究室単位ではなく適当に選んだ学生2人と社会人1人で、社会人はほとんど吹田にいません。しかも半分くらいは欠席です。またグループ12もあるのに中継用の機材は各場所に1つずつしかありません。講義室のワイヤレス環境障害のため使えず、ネットは使えないものとします。この状況下で12グループが各自演習を行うにはどうすりゃええねんヽ(`Д´)ノボケーーー!!そして先生はさぁ各グループやれと放置P。まぢ何考えてるんだと正気を疑いました('A`)なにこのぐだぐだな授業。信じらんない。ちなみにうちのグループの社会人さんは欠席でした(つД`)

6限ネットワーク基礎論。6限授業なんて教職でもとらない限りなかなかないんじゃないかと。18時始まりで終わるの19時半。基礎論は大きく4つにテーマを分けていろいろやるらしいですが、とりあえずはじめはグラフ理論