09/12/30 00:18:35
誰か超高速なreplace関数作ってけろ
633:デフォルトの名無しさん
09/12/30 00:33:09
>>631
>>629は誤差とは関係ないだろ。
634:デフォルトの名無しさん
09/12/30 00:46:19
>>633
すまん。俺が間違ってたorz
635:デフォルトの名無しさん
09/12/30 02:28:38
>>633
なんで誤差とは関係ないの?
浮動小数点演算である以上、誤差はあるはず
誤差が1未満だから ceil()で消えるってこと?
>>629
ceil じゃなくて floor じゃないの?
636:デフォルトの名無しさん
09/12/30 03:11:06
>>635
そう。
整数部にまで及ぶような誤差がでないと結果に誤差が反映しない。
はるか下のほうの桁にしか、誤差はでないと思われ。
よくみたら、切り上げだと桁が繰り上がるところで正しい結果がでないね。
+1してfloor()だ。
637:デフォルトの名無しさん
09/12/30 08:37:44
#define mx(a,x,m,b) ((x)&m>(x)~m?(x)&=m,(a)|b:(x)&=~m,(a))
mx(mx(mx(mx(mx(a,x,0xaaaaaaaa,1),x,0xcccccccc,2),x,0xf0f0f0f0,4),x,0xff00ff00,8),x,0xffff0000,16);
638:デフォルトの名無しさん
09/12/30 08:40:37
>>637
あ、だめだx変わんね!
639:デフォルトの名無しさん
09/12/30 08:49:40
>629
浮動小数点数使うんなら frexp(x, &result) でいいじゃん。
640:デフォルトの名無しさん
09/12/30 10:21:01
>>623 >>629 >>639 で簡単にベンチとってみた。
ビットが立っていない場合が 0 になるように一部変更してる。
URLリンク(codepad.org)
Core2Duo T7600(2.33GHz) / RAM 3GB
gcc version 4.3.4 20090804 (release) 1 (GCC)
最適化オプション指定なしで 50,000,000 要素に対して 10 回実行した平均値だと
>>623 1.4564秒
>>629 6.2842秒
>>639 1.5501秒
-O2 指定で
>>623 0.6673秒
>>629 6.0827秒
>>639 1.2921秒
641:デフォルトの名無しさん
09/12/30 10:57:31
logって中の人がフーリエ展開とかしてるからおそいのかね?
642:デフォルトの名無しさん
09/12/30 11:09:46
>>637 を推考し直してみました
#define mx(b,m,x,a) (x&m>x&~m)?(a)|b,(a))
=mx(1,0x55555555,x,mx(2,0xaaaaaaaa,x,mx(4,0xf0f0f0f0,x,mx(8,0xff00ff00,x,mx(16,0xffff0000,x,0)))));
643:デフォルトの名無しさん
09/12/30 11:15:41
expは兎も角logは余り使われないから金がかかっておらず相対的に
「計算」が早くは無い。CPUレベルのサポートで
並列化を促進すれば何倍も速くなる筈だが、コストパフォーマンス
が低くやる価値が少ないと判断されてるだけ。
644:デフォルトの名無しさん
09/12/30 11:35:42
さすがに6秒も差が出来ると主任も「ウーム」と改善を要求してくるレベル
645:デフォルトの名無しさん
09/12/30 11:39:10
>>644
「試行回数を減らせば早くなりますよ!」
646:デフォルトの名無しさん
09/12/30 11:40:56
>>644
回数が少なければ「わかりやすい」コードがお勧め
647:デフォルトの名無しさん
09/12/30 11:45:41
え?一番早い方法を模索してるんじゃないの?
648:デフォルトの名無しさん
09/12/30 11:49:19
ウチの上司は元組み込み屋なので
「呼んだ関数が処理してる時間は極力短く」
「呼んだ関数だけじゃなく処理時間そのものも極力短く」
「デッドラインを設ける」
とまあ常に組み込み状態
すべての処理コードが割り込みの考え方で動いてる
(他の誰も入って来れない時間を短く=CPU占有の時間を短く)
649:デフォルトの名無しさん
09/12/30 11:51:04
>>641
底の変換してからFYL2X使ってるみたい
二回計算しないといけないから遅いのかもね
650:デフォルトの名無しさん
09/12/30 11:52:53
つーかあれか
logは底がネイピア数だからそのままFYL2Xでいいのか
その周囲の面倒臭いコードはDOMAIN ERRORとかチェックしてるだけか
そうなるとlog10ならもっと遅いだろうね
651:デフォルトの名無しさん
09/12/30 12:00:37
>>648
昔組み込みやってた
小さいものはパズルみたいで楽しかったけど
大きなものだと死にそうになるんだよな・・・・
652:デフォルトの名無しさん
09/12/30 13:09:09
>>651
なるね