You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Z3库计算7的立方根?将Decimal求根代码转为Z3实现

用Z3求解器实现7的立方根计算(替代decimal模块)

问题描述

现有一段使用decimal模块计算7的立方根的代码,能得到高精度结果,如何修改为使用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是定理证明器,并非专门的数值计算库,因此不能直接通过幂运算求解立方根,需通过约束求解的方式实现:定义变量并添加x³ = 7的约束,让Z3求解满足该约束的实数解,同时配置精度以匹配原代码的100位有效数字。

修改后的代码如下:

from z3 import *
import time

# 定义高精度实数变量
x = Real('x')
# 设置输出精度,匹配原代码的100位有效数字
set_option('precision', 100)

beg = time.time()
# 创建求解器并添加核心约束
s = Solver()
s.add(x**3 == 7)
# 求解约束并提取结果
if s.check() == sat:
    model = s.model()
    cuber = model[x]
end = time.time()

print(end - beg)
print(cuber)

关键说明

  • Z3的Real类型支持高精度实数运算,set_option('precision', 100)配置与原代码的getcontext().prec = 100效果对应,保证输出精度一致。
  • 核心逻辑是将立方根问题转化为方程求解,这是Z3擅长的约束求解场景,最终输出的数值结果与decimal模块计算结果一致。
  • 求解时间可能因Z3的底层求解逻辑与decimal模块的数值计算逻辑不同而略有差异。

内容的提问来源于stack exchange,提问作者Gqrsw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:10