FFTをする為に2のベキで収まる数を求める関数 function iGTexp2(k:integer):integer; //k < 2^n となる 2^n begin k:=k or (k shr 16); //ビットシフトしながらORすると k:=k or (k shr 8); //下位ビットが全部1になる k:=k or (k shr 4); k:=k or (k shr 2); k:=k or (k shr 1); Result:=k+1; //1を足せば 2^nになる end;
function iLog2(m:integer):integer; //m=2^n を与えて nを返す begin if m>=$10000 then Result:=iLog2(m shr 16)+16 else if m>=$100 then Result:=iLog2(m shr 8)+8 else if m>=$10 then Result:=iLog2(m shr 4)+4 else if m>=4 then Result:=iLog2(m shr 2)+2 else if m>=2 then Result:=iLog2(m shr 1)+1 else Result:=0; //1か0 0ならエラーだけど知らない end;