| ■No91861 (えん さん) に返信
> nは4のべき乗ですので
> 8は来ないはずですが・・
あぁ、なるほど。
もしも n が任意の自然数だった場合には
> For g As Integer = 1 To CInt(Math.Log(n, 4))
ではなく
For g As Integer = 1 To CInt(Int(Math.Log(n, 4)))
になるかも。
■No91862 (えん さん) に返信
> すいません、あと
>
> i = 0;
> for (j = 1; j < n - 1; j++) {
> for (k = n >> 1; k > (i ^= k); k >>= 1);
> if (j < i) {
> x0r = ar[j];
> x0i = ai[j];
> ar[j] = ar[i];
> ai[j] = ai[i];
> ar[i] = x0r;
> ai[i] = x0i;
> }
> }
こうかな…? (未検証)
Dim i As Integer = 0
For j As Integer = 1 To n - 2
' Dim k As Integer = n >> 1
Dim k As Integer = n \ 2
i = i XOr k
While k > i
' k >> = 1
k \= 2
i = i XOr k
End While
If j < i Then
Dim swap_ar = ar(j)
ar(j) = ar(i)
ar(i) = swap_ar
Dim swap_ai = ai(j)
ai(j) = ai(i)
ai(i) = swap_ai
End If
Next |