实数在java中的表示,java - 如何在Z3(Java)中从模型中获取实数值作为小数(双精度)? - SO中文参考 - www.soinside.com...

我正在尝试从Model计算的Solver中获取Real值。但是,即使我将pp.decimal设置为true(在SMT2文件中和使用Global.setParameter),只有在打印模型本身时才会遵循。

当我尝试使用model.getConstInterp在model.getConstDecls的值上获取值时,它们都显示分数(使我的hacky解决方案使用Double.parseDouble不可行)。

我想知道是否有任何方便的方法来获取模型中常量函数的值而不强迫我编写解析器(对于模型或它产生的算术表达式)。

任何帮助将非常感激。

编辑包含示例:

BoolExpr[] assertions = ctx.parseSMTLIB2String(smt, null, null, null, null);

// get solver from context (modelled upon assertions)

Solver solver = ctx.mkSolver();

solver.add(assertions);

switch (solver.check()) {

case SATISFIABLE: {

// fetch our model

Model model = solver.getModel();

System.out.println(model);

for(FuncDecl constant : model.getConstDecls()) {

// get the interpretation

Expr value = model.getConstInterp(constant);

System.out.println(value.toString());

输出:

(define-fun b () Real

(- 1.0))

(define-fun w2 () Real

0.5)

(define-fun w1 () Real

0.5)

-1

1/2

1/2

我想以某种方式将这些常量函数的结果提取到Java doubles中。如果他们都遵守Expr,我可以简单地解析toString()s'pp.decimal的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值