c

exp関数の (実装の) 限界を体感

@shuyo さんがブログを書いた数日後に奇しくもロジスティック回帰を実装してexpのオーバーフローではまっていたので,expの限界について,自分自身で体感してみることにした.@shuyo さん曰く,だいたい710くらいでinfになりまっせ,とのこと.ふむふむこれ…

親プロセスは2度死ぬ - デーモン化に使うダブルforkの謎

デーモンプロセスを作る場合には,教科書によく書かれている2度forkは不要ではないか? ということを以前の記事に書いた. [c][unix]UNIXネットワークプログラミングのお勉強 (2) デーモンの作り方 - 睡眠不足?! 確かにBSDのdaemon(3) のコードでは,forkは…

UNIXネットワークプログラミングのお勉強 (3) PF_UNIX vs. PF_INET

そういえば一か月前はネットワークプログラミングを勉強していたことを思い出した.案の定,すべてを忘れていたのでもう一度復習. マシン内の通信の場合,TCP通信 (PF_INET) 以外にファイルを介したソケット通信 (PF_UNIX) という選択肢がある.どれくらい…

fgetsでファイルを読み込むためのバッファの大きさ設定方法

c

C言語初心者向けメモ. 僕はファイル処理をする場合にはfgetsを多用するのだけれど,その際 #define BUFFLEN 102400 char buff[ BUFFLEN ]; とか,スタック領域に乗らない程大きな領域であれば char *buff = malloc(sizeof(char) * BUFFLEN); というようにゆ…

お手軽転置インデクスを用いた検索エンジン: (2) なんちゃって検索サーバ編

IR c

前回: お手軽転置インデクスを用いた検索エンジン: (1) AND検索編 - 睡眠不足?! 前回に続き,なんちゃって検索エンジンを作ってみます.ネットワークプログラミングをやりたかった理由のひとつが,検索エンジンをデーモンとして立ち上げておけば,ソケット…

UNIXネットワークプログラミングのお勉強 (1)

3連休何をしようかと考えていたら,なんとなくデーモンプログラムを書いてみたくなったので,Cによるネットワークプログラミングを勉強することにした. 2年くらい前に文献[1]を購入し,過去に2回ほど勉強しようと思ったけれど,とにかくインクルードする必…

お手軽転置インデクスを用いた検索エンジン: (1) AND検索編

IR c

突然Cでコードを書きたくなったので,なんちゃって転置インデクスを用いた検索プログラムを書いてみた.転置インデクスとは,索引語と呼ばれる単語が出現する文書情報 (場合によっては位置情報も) を保持したデータ構造のことで,索引語と,それに対応する転…

負数に対してシフト演算を行う際の注意

c

ワード単位で操作したいので,4バイト型として(signed) int型を利用していた.符号なんて別に関係ないだろう,そう思っていた時期が僕にもありました. シフト演算を行う際に符号あり型の場合,右シフトした際の左ビットは0で埋められるとは限らない.1で埋…

スタック領域とヒープ領域の速度

会話の中で「ヒープに比べてスタック領域の方が処理が速い」という話が出てきて,なぜそうなのかすぐにわからなかった.後で考えてみれば,ヒープ領域はアドレスから参照するしかないので,ワンステップ余計な処理が必要だな,と気がついた.けれど,そのロ…

gccを用いたCの共有ライブラリの作り方

c

ゆとりなもので,ついこないだまで動的リンクと静的リンクの違いがわかっていなかった.動的リンクというのが理解できた頃,そっかユーティリティライブラリは自分で共有ライブラリ作ってしまえばいいんだ,というごく当たり前のことが理解できた.UNIXをさ…

gamma codeを実装してみた

variable-byte(VB) codeに引き続きgamma codeを実装してみた.今度はかなり苦労. というのもVBのように固定長でないため,異なるビット長の結果を詰めて格納していかなければならない.先輩に教わったマスクの作り方(~0ビット列を左シフトして戻ーす,右シ…

Variable byte(VB) codeを実装してみた

なんだかbit-wiseな圧縮手法の実装を練習してみたくてカタカタしてみた. コードは汚いので割愛.結果 4Byte integer -> VB code # 824, 5, 214577を圧縮 before: 00000000 00000000 00000011 00111000 00000000 00000000 00000000 00000101 00000000 000000…

比較をしないソート.そこでビンソートですよ

c

どう書く.orgの問題で久しぶりに解けそうな問題がでてきた.比較をしないソート http://ja.doukaku.org/187/ぱっと思いついたのはビンソート.というわけでCで実装.だんだんリファレンスを見なくても書けるようになってきた.

strtokを入れ子にする

c

strtokはstaticなchar*を分割していくので,入れ子にすることができない.それを解決するのがstrtok_r. char *strtok_r(char *str, char *delimiter, char **save_ptr) こりゃ便利.

ヒープソートで気がついたこと

勉強会に予習なしで参加してしまったので復習。 特筆することはないけれどPascalの場合、配列の添字が1からsizeという表現のため、 二分木の配列表現がC系とは異なるので注意 例えば、array[i]の子要素はよく left: array[i*2] right: array[i*2 + 1]と表現…

Makeと分割コンパイル

今までCでこーぢんぐするとき,常にひとつのファイルで作っていた. 数百行程度だったらいいのだろうけれど,大きくなったり,ライブラリを作ろうとなったら 分割コンパイルせななぁ,と思っていたけれど,入門書やら分割コンパイルに関して記述されている文…

u_int32_t undeclared

c

`u_int32_t' undeclared (first use in this function)というエラーが出た #include <sys/types.h>で解決</sys/types.h>

講習会の疑問解決

真偽値を返す条件文の場合,真を返すことが発覚 int x = (0 < 10); printf("%u\n", x); //=> 1int x = 5; int *p, *q; p = &x; q = p + 1; printf("%p %p\n", p, q); //=> 0xbfbfebec 0xbfbfebf0 printf("%u %u\n", p, q); //=> 3217026028 3217026032

文字列定数に気をつけろ!

c

独習Cの問題は余裕余裕と鼻くそほじりながら解いていたら,ある問題でひっかかる. strcat()関数を自分で設計しなさいという問題. 文字列とポインタについて大分知識がついたつもりだったところで落とし穴. あれ,うまくいかないよママン char *str1, *str…

独習C

基本中の基本であるCをやることにした.かじったことはあったけれど基本からやり直したい. そしてK&Rなんて硬派な書物は怖いので独習Cあたりから始めることにする. 独習C作者: ハーバートシルト,柏原正三,Herbert Schildt,トップスタジオ出版社/メーカー: …