Title

2013年11月の投稿一覧

フィリピン災害への寄付

【寄付ハック】フィリピン災害へ寄付した人に、オレが自腹でiPad miniプレゼントキャンペーン(fladdictさん)

fladdictさんはいつもアイデア素晴らしい。
全員が得するやり方でないと支持されにくいんですよね。うまい。
まんまと宣伝しちゃうぜ!

僕も応募したよー

添い寝アラームアップデート 1週間無料にします!

添い寝アラームは子供寝かしつけていたら自分も寝てしまって気づいたら夜中/朝だよ!
洗濯してないし、洗い物もそのままだよ!
大人の時間が! 
深夜アニメ見るつもりだったのに!

といったような事を防ぐ、小さいお子さんをお持ちのかたのためのアプリです。

使い方はアラームスタートボタンをタップするだけ。
あとは画面を下に伏せておいておけば、マイクと加速度センサをつかって、良い頃合いに起こしてくれます。
アラームは最初はバイブレータ、次は音。止めないと音がだんだん大きくなります。

アラームは本体を叩くと延長されます。画面見なくても暗闇でスヌーズできます。

今回のアップデートでiOS7及びiPhone5s/5cに最適化しました。
(前のバージョンでも動いていましたが)

アイデアも含めけっこう自信作、、というか自分ではとても役立ってるアプリなので是非多くのパパママに使って頂きたく、1週間無料にしておきますのでパパママお試し下さい!

よろしくおねがいします。

【高速化】abs()関数を使うべきか

絶対値を求めるC言語の関数はabs() です。

なんとなく関数呼び出しのコストがもったいない気がして、

int a = b >0 ? b : -b;

みたいな書き方を見かけることがあります。
(というか意識せずに自分でも書いていることが・・・)

ちょっと話は変わって、絶対値計算に条件分岐が必要だと思いますか?

答えは環境依存、、ということになりますが、大抵の環境では条件分岐不要です。
現代の多くの環境においてはabs()関数を使えば関数呼び出しはインライン展開された上に分岐なしの絶対値計算コードが出力されます。
だからあまり気にせずabs()を使ってOK。

VisualC++にてint a = abs(b);というプログラムをコンパイルした結果は以下のような感じになりました。たったの3命令、しかも分岐なし。

(EAXレジスタにbの値が入っている)

cdq 
xor eax,edx 
sub eax,edx

CDQが見慣れない感じですが、CDQ命令はEAXレジスタの符号をEDXレジスタのすべてのビット位置にコピーする便利命令です。

C言語風に書くと以下のような感じでしょうか。

a = (b ^ (b >> 31)) - (b >> 31);

結論。
標準関数は自分で再実装せず、ありがたくそのまま使え。

カレンダー

2013年11月
« 10月   12月 »
 123
45678910
11121314151617
18192021222324
252627282930  

▲Pagetop