640×400
マルチスレッドやべえ
2の累乗かを判定する関数の顛末
呼び出し側の構成を考え直した結果、標題の関数はassert()の中に入った。どんなコードでも良かった。今は反省している。
で、今度は無駄にマルチスレッドの何やらを書いてるぜイェーイ。
確かに罠が多そうだなあ。まあでも、どうせ慣れない最初の頃だけだろ、めんどくさいのは。ハードのパフォーマンスをガチで引き出すのに絶対必要なんだと思えばいくらでも、いや嘘ついた失礼、ある程度までのやる気は割と自然に出るぜ。
でも、俺のPCのCPUって激しくシングルスレッドなんですが。これで開発すんのすげー無理があるんじゃね(笑)。しかもNUMBER_OF_PROCESSORS=1の時はスピンウェイトの処理とかも変えてる訳で、普通にデバッグ出来ない(笑)。でもぶっちゃけ例の変な電卓の変なソースよりは危なくないと思いました。
まー、ちょっと足を伸ばせば隣の事務所にC2Dとかあるし。むしろ隣の部屋はNorthwoodだった気もするし。
つーかバグっても誰も死なない奴だし。
懐かしい物を引っ張り出した
2の累乗かどうかの判定が必要になって、そーいやDOS時代にTASM一本でゴリゴリ書いたコマンドラインの多倍長分数電卓っぽい奴にそんな処理があったかもなーと何となく思った。当時の俺なりに無駄に頑張ってたから、あればビット演算で書いてるだろうし、参考になるかも。どこにソース置いたか忘れてて見付かりにくかったけど、ちょっと探したら見付かったぜ。早速見てみるぜ。
全然読めねーから。マジデ。
つーか本気でコメント皆無だな昔の俺(笑)。まあでも、これコメントあっても全く読めねーからどうでもいいか。ハハハハハ。
仕方ないので真面目に考えてみるか、と思ったけど、やっぱ面倒なのでその辺で検索してみる。ふむふむ。
inline bool is_power_of_2 ( unsigned int i ) { return ! ( i & i-1 ); }
これでいいっぽいな。
でも、これだと0もtrueになっちゃうんだよな。名前的にも用途的にも0はfalseでないと。
inline bool is_power_of_2 ( unsigned int i ) { return i && ! ( i & i-1 ); }
これでいいのかな?
どうせなら分岐も消したくなるなあ(笑)。まあでも、実のところ速度も何も不要な使い道なので、いい方法が思いついたら書き換えれば十分か。adc命令とかは駄目みたいだし。
signedだとどうなるか、とかも軽く考えたけど、めんどくさそうだし別に使い道無いし、ってことでこれもパス。