z3py:解析小实数时出错

z3py:解析小实数时出错,z3,z3py,Z3,Z3py,我正在尝试将z3py集成到我的应用程序中。有些断言涉及小实数,例如 solver.add(x <= 1e-6) 而断言 solver.add(x <= 1e-4) solver.add(xZ3中没有精度限制。它可以表示任意精度的有理数和代数数。下面是一个示例: print RealVal('1/10000000000000000000000000000') print simplify((RealVal('1/10') ** RealVal('10')) ** RealVal('

我正在尝试将z3py集成到我的应用程序中。有些断言涉及小实数,例如

solver.add(x <= 1e-6)
而断言

solver.add(x <= 1e-4)

solver.add(xZ3中没有精度限制。它可以表示任意精度的有理数和代数数。下面是一个示例:

print RealVal('1/10000000000000000000000000000')
print simplify((RealVal('1/10') ** RealVal('10')) ** RealVal('10'))
您可以在以下网站在线试用:

函数
RealVal(a)
将Python值转换为Z3实值。它使用Z3 C API
Z3_mk_numeric
来实现这一点。此代码可在Z3发行版中包含的
Z3.py
文件中找到。API
Z3_mk_numeric
需要一个以十进制格式编码有理数的字符串(例如,“1.3”)或分数格式(例如“1/3”)。请注意,不支持科学表示法。为了方便python用户使用
RealVal(a)
,我们使用
str(a)
方法在调用
Z3_mk_numeric
之前将
a
转换为字符串。 因此,用户还可以编写
RealVal(1)
RealVal(1.2)
,等等


第二点信息是语句
solver.add(x)感谢Leonardo。目前,我刚刚破解了RealVal()函数,使其能够将科学符号转换为可识别的格式。
print RealVal('1/10000000000000000000000000000')
print simplify((RealVal('1/10') ** RealVal('10')) ** RealVal('10'))
print str(1e-4)
print str(1e-6)