0
z3이 Bitvectors에 대한 대수를 직접 계산하는 함수가 있습니까?대수 2를 Z3의 비트 벡터로 계산하는 방법은 무엇입니까?
그렇지 않으면 어떻게 로그를 효율적으로 구현할 수 있습니까?
z3이 Bitvectors에 대한 대수를 직접 계산하는 함수가 있습니까?대수 2를 Z3의 비트 벡터로 계산하는 방법은 무엇입니까?
그렇지 않으면 어떻게 로그를 효율적으로 구현할 수 있습니까?
나는 최선의 방법은 본질적으로 룩업 테이블 인 if-then-else 체인으로 코드화하는 것입니다. 로그 천천히 성장하기 때문에
(ite (< x 2) 0
(ite (< x 4) 1
(ite (< x 8) 2
.... etc ...
, 당신은 등 32 비트 벡터 32 가지, 다른 기지 유사하다 만이 필요한 것 : 기본-2를 가정하면, (lg 0 = 0
가정) 같은이있을 것이다. 자동으로이 코드를 쉽게 생성 할 수 있습니다.
비트 마스크를 사용하여 가장 왼쪽에 설정된 비트의 인덱스를 계산하여 동일하게 구현할 수도 있습니다. (즉, 4 비트 벡터를 가정 할 때, 비트 단위 -와 1000 그리고 결과가 0이 아닌 경우 대수는 3, 그렇지 않으면 비트 단위 - 그리고 01000은 2가되는 등) 당신은 위의 솔루션에 비해 더 나은 아무것도; 그러나 위의 방법이 효과가 없다면 시도해 볼 가치가 있습니다. –