z3py:解析小实数时出错
我正在尝试将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('
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 APIZ3_mk_numeric
来实现这一点。此代码可在Z3发行版中包含的Z3.py
文件中找到。APIZ3_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)