如何通过非标准 FlatZinc 扩展获得有理数的精确无限精度表示?
How to obtain an exact infinite-precision representation of rational numbers via a non-standard FlatZinc extension?
默认情况下 mzn2fzn
自动计算 MiniZinc 模型中浮点除法的结果,并将其存储为常量 float 结果 FlatZinc 模型中的值。
示例:
文件test.mzn
var float: x;
constraint 1.0 / 1000000000000000000000000000000000.0 <= x;
constraint x <= 2.0 / 1000000000000000000000000000000000.0;
solve satisfy;
翻译为
mzn2fzn test.mzn
等于
var 1e-33..2e-33: x;
solve satisfy;
我们想要获得***的是 FlatZinc 文件,其中包含以下几行:
var float: x;
var float: lb;
var float: ub;
constraint float_div(1.0, 1000000000000000000000000000000000.0, lb);
constraint float_div(2.0, 1000000000000000000000000000000000.0, ub);
solve satisfy;
其中 float_div()
是 新 引入的非标准 FlatZinc 约束。
是否可以使用 std
约束目录的变体来生成原始问题的这种编码,或者这种编码是否需要对 [=14] 的源代码进行更重大的更改=] 工具?在后一种情况下,我们可以得到一些指导吗?
***:我们有一些公式不适合使用有限精度浮点表示,因为它会将 SAT
结果更改为 UNSAT
。
目前无法无限精确地生成 FlatZinc。虽然这个想法已经讨论过几次,但它需要使用可以提供这些无限精确类型的库来重写或附加 MiniZinc 的大部分内容。像这样的库,例如 Boost interval
库,似乎缺少选项,并且目前无法为分布 MiniZinc 的所有机器目标编译。无限精确类型似乎有各种有趣的案例,但在 MiniZinc 编译器的实现中,我们仍在寻找一种合适的实现方式。
虽然无限精度不上table。 MiniZinc 编译器确实打算根据浮点标准是正确的。请随时报告 MiniZinc Issue Tracker.
可能出现的任何问题
默认情况下 mzn2fzn
自动计算 MiniZinc 模型中浮点除法的结果,并将其存储为常量 float 结果 FlatZinc 模型中的值。
示例:
文件test.mzn
var float: x;
constraint 1.0 / 1000000000000000000000000000000000.0 <= x;
constraint x <= 2.0 / 1000000000000000000000000000000000.0;
solve satisfy;
翻译为
mzn2fzn test.mzn
等于
var 1e-33..2e-33: x;
solve satisfy;
我们想要获得***的是 FlatZinc 文件,其中包含以下几行:
var float: x;
var float: lb;
var float: ub;
constraint float_div(1.0, 1000000000000000000000000000000000.0, lb);
constraint float_div(2.0, 1000000000000000000000000000000000.0, ub);
solve satisfy;
其中 float_div()
是 新 引入的非标准 FlatZinc 约束。
是否可以使用 std
约束目录的变体来生成原始问题的这种编码,或者这种编码是否需要对 [=14] 的源代码进行更重大的更改=] 工具?在后一种情况下,我们可以得到一些指导吗?
***:我们有一些公式不适合使用有限精度浮点表示,因为它会将 SAT
结果更改为 UNSAT
。
目前无法无限精确地生成 FlatZinc。虽然这个想法已经讨论过几次,但它需要使用可以提供这些无限精确类型的库来重写或附加 MiniZinc 的大部分内容。像这样的库,例如 Boost interval
库,似乎缺少选项,并且目前无法为分布 MiniZinc 的所有机器目标编译。无限精确类型似乎有各种有趣的案例,但在 MiniZinc 编译器的实现中,我们仍在寻找一种合适的实现方式。
虽然无限精度不上table。 MiniZinc 编译器确实打算根据浮点标准是正确的。请随时报告 MiniZinc Issue Tracker.
可能出现的任何问题