Обратите внимание, что вы не можете разыграть реальное значение z3 в число с плавающей точкой. Действительное значение z3 - это бесконечно точное действительное число, и его нельзя точно представить как значение с плавающей запятой, которое имеет ограничения точности.
Вместо этого вы хотите преобразовать его в Python дробь: https://www.tutorialspoint.com/fraction-module-in-python, который может представлять все действительные значения z3, если они не являются иррациональными корнями полиномов. (Вы можете игнорировать этот последний комментарий, если вы не работаете с полными алгебраическими c -реалами в z3.)
Для этого используйте метод as_fraction
:
from z3 import *
x = RealVal("1/3")
x2 = x.as_fraction()
print type(x2)
print x2
Это печатает :
<class 'fractions.Fraction'>
1/3
Если вы действительно хотите, вы можете превратить это в число с плавающей точкой:
x_float = float(x2.numerator) / float(x2.denominator)
print type(x_float)
print x_float
Это напечатает:
<type 'float'>
0.333333333333
, но, очевидно, вы теперь потерял точность.