Я использую Z3py, чтобы попытаться провести некоторые эксперименты по проблеме ошибки округления, выясняется, что я должен подвести итог битвеку и реалу. Однако, когда я пытаюсь сделать это, я получаю ошибку «несоответствие сортировки». Это мой код:Z3: Можно ли суммировать битвек и реальный?
x = BitVecVal(8, 6)
y = Real('y')
solve(y + x == 5)
Есть ли способ суммировать BitVec и Real? или просто получить значение Int BitVec?
Отличный ответ, спасибо, человек. Я не видел этого в документации. Однако влияет ли эта функция переноса на производительность Solver? – vutran
В вашем примере значение 'x' является значением. Таким образом, эффективность не влияет. Препроцессор Z3 преобразует 'to_int (x)' в действительное число '2'. Однако, если 'x' не является значением, то есть серьезное влияние на производительность. 'To_int' будет« взорван »в большой термин' if-then-else', который «строит» целое число, основанное на битах 'x'. Мы получаем термин 'if-then-else' для каждого бита. Есть «умные» способы обработки 'to_int', но Z3 в настоящее время использует этот простой/наивный подход. –