( uid_6201 | 2020. 11. 08., v – 00:07 )

Jaja, pontosan így csináltam meg az FFT tesztemnél is C-ben és a reverse_bits() metódus előtt Rust-ban is (1.37). Arra akartam egyúttal rávilágítani, hány helyen lehet indokolatlan lassulást okozni a szoftverekben.
Egyébként a Lua volt a legfurmányosabb az 5.3-as verziót megelőzően. Ott ugyanis kizárólag double volt a numerikus típus, de szerencsére van egy "bit" nevű standard modulja, ahol a háttérben áttöltötték uint64_t-re az értéket, elvégezték a logikai műveletet majd visszatöltötték double-ba. Az alábbi módon nézett ki (32 bitre):

  brev = bit.bor(bit.rshift(bit.band(brev, 0xaaaaaaaa), 1), bit.lshift(bit.band(brev, 0x55555555), 1))
  brev = bit.bor(bit.rshift(bit.band(brev, 0xcccccccc), 2), bit.lshift(bit.band(brev, 0x33333333), 2))
  brev = bit.bor(bit.rshift(bit.band(brev, 0xf0f0f0f0), 4), bit.lshift(bit.band(brev, 0x0f0f0f0f), 4))
  brev = bit.bor(bit.rshift(bit.band(brev, 0xff00ff00), 8), bit.lshift(bit.band(brev, 0x00ff00ff), 8))
  brev = bit.bor(bit.rshift(brev, 16), bit.lshift(brev, 16))