floating-point - 在 MiniZinc 中我该如何解决这个错误?

标签 floating-point minizinc

在 MiniZinc 中,我怎样才能让这段代码编译时不会出现错误“找不到具有此签名的函数或谓词:`round(var float)'”?

var int: D = 1;
var int: F;
constraint F = round (D / 2);

最佳答案

该消息只是意味着 MiniZinc 不支持带有决策变量的 round(),即“round(var float)”。它仅支持“round(float)”,即固定浮点值。 ceil()和floor()也是一样,只是支持固定的float值。

MiniZinc 2.0 自动将参数除法 (/) 转换为决策变量的浮点除法(因此不受支持)。但是,由于您使用的是 var int,您可以尝试使用整数除法(“D div 2”),它给出 F = 0。

对于 MiniZinc 2.0 以及支持 var float 的求解器(例如 G12/mip、JaCoP、Gecode 和 ECLiPSe):如果您将 F 定义为“var float: F”,则 F 将为 0.5。请注意,G12/fd 不支持 var float 。

关于floating-point - 在 MiniZinc 中我该如何解决这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28406318/

相关文章:

optimization - 如何将启发式算法融入 MiniZinc 中?

optimization - 如何最大化大于 32 位的 var int?

linear-programming - 如何在研究中展示 MiniZinc 的效率

java - Double 上的数学运算结果是否完全可重复?

c - 防止浮子除法中的上溢/下溢

java - 如何检查输入值是整数还是 float ?

scheduling - 约束编程 : Scheduling with multiple workers

algorithm - 我什至无法表达这个问题,我需要从一大组数字中选出 3 个非常接近的数字

c++ - 你如何在 C++ 中四舍五入小数位?

assembly - 从使用x87 FPU的64位汇编函数返回 float