繁体   English   中英

如何用 Z3 库求 7 的立方根

[英]how to find cube root of 7 with Z3 library

这段代码返回了一个好的结果,但是有没有人知道如何转换这个程序以返回相同的结果,但在 Z3 求解器中???

from decimal import *
import time

getcontext().prec = 100
x = Decimal(7.0)

beg = time.time()
cuber = x**(Decimal(1)/Decimal(3))
end = time.time()
print(end-beg)
print(cuber)

z3 没有提供直接计算立方根的方法,但您可以使用简单的约束来表达它:

from z3 import *

cuber = Real('cuber')

s = Solver()
s.add(cuber * cuber * cuber == 7)

if s.check() == sat:
    print(s.model())
else:
    print("Not satisfiable")

运行时,打印:

[cuber = 1.9129311827?]

那个? 最后意味着这是一个近似值,即它不是精确的结果。 您可以像这样提高打印精度:

set_param(precision=100)

(在import z3 后立即添加该行。)现在它将打印:

[cuber = 1.9129311827723891011991168395487602828624390503458757662106476404472342761792307560075254414772857099?]

它有更多的数字,但仍然不精确,因为 7 的立方根是无理数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM