Я хочу реализовать эффективную библиотеку для побитовых операций над большими целыми числами. Я написал следующую функцию, которая переопределяет BTEST
:Лучший способ реализации побитовых операций для n-байтовых целых чисел
FUNCTION testb_i2b(n,i)
INTEGER(I8B), DIMENSION(0:), INTENT(IN) :: n
INTEGER(I2B), INTENT(IN) :: i
INTEGER(I2B) :: j
LOGICAL :: testb_i2b
j = ISHFT(i,-6)
IF (j .LE. UBOUND(n,1)) THEN
testb_i2b = BTEST(n(j),i-ISHFT(j,6))
ELSE
testb_i2b = .FALSE.
END IF
END FUNCTION testb_i2b
Массив n
содержит 64*(SIZE(n)-1)
бит моего большого целого. Есть ли более эффективный способ получения одинаковой функциональности?
Ваш BTEST слишком медленно? Является ли ваш aproach быстрее, по крайней мере, немного? Для какого компилятора? –
Да, описанная выше реализация становится узким местом в моем коде. Я использую ifort. – delete000