- プログラミングのお題スレ Part5
778 :デフォルトの名無しさん[]:2014/11/10(月) 10:45:51.93 ID:UPYVTgdg - >>776
各桁を求める(10で割る計算)が速く出来る可能性。 乗法とビットシフト Cは2ベキとして、x/10 = (x * (C/10)) /C。 浮動小数点乗法 (x/BASE) *10 で上位順に求める。 引き算とif x=5412だったら、1000ずつ引いていって初めて引く数より小さくなった時で最上位の数を求める。
|
- プログラミングのお題スレ Part5
779 :デフォルトの名無しさん[]:2014/11/10(月) 11:34:11.64 ID:UPYVTgdg - x/10 = ( x * 214748365 ) >> 31に変形できるけど、64ビット演算になるし、
コンパイラが定数の割り算を似たような変形してて速度差はでないかと。
|
- プログラミングのお題スレ Part5
780 :デフォルトの名無しさん[]:2014/11/10(月) 15:45:32.20 ID:UPYVTgdg - コンパイラの割り算に、標準的なCの範囲では太刀打ち出来ないと思った。
割り算での対抗はあきらめて、たとえば0-99999に対して各桁の数字予めを計算しておくとかだったらいいかもしれない。
|
- プログラミングのお題スレ Part5
789 :デフォルトの名無しさん[]:2014/11/10(月) 20:59:45.27 ID:UPYVTgdg - JITがあるから速いって、実測したコードを上げてくれ。Cやアセンブラに速度が届くとおもえん。
|
- プログラミングのお題スレ Part5
793 :デフォルトの名無しさん[]:2014/11/10(月) 21:24:35.10 ID:UPYVTgdg - それは短絡的だ。アルゴリズムは同一か。
|
- プログラミングのお題スレ Part5
796 :デフォルトの名無しさん[]:2014/11/10(月) 21:34:32.02 ID:UPYVTgdg - 10進の0-9の個数を求めるのに、6ビット*10個のビット列 ( < 64ビット、ビットシフトさせて1変数へ埋め込む)
で計算結果を蓄えておく方針で速くなった。 しかも63個以下だったら、一回の足し算で10個分の足し算が一気に出来る。
|