来自MiniZinc specification:
浮点数表示实数。浮点表示法是实现定义的。这意味着浮点数的可表示范围和精度是实现定义的。但是,实现应在运行时中止特殊的浮点操作(例如,如果使用IEEE754浮点,则产生NaN的操作)会中止。
浮点表示是实现定义的是什么意思?是否取决于要使用的求解器?
mzn2fzn 工具如何处理Float表示形式?它的界限是什么?
答案 0 :(得分:0)
MiniZinc尝试遵守IEEE标准。就我所知,编译器本身(minizinc
驱动程序或其较老的兄弟mzn2fzn
)遵守此标准。在内部,编译器对其浮点值使用64位精度。如果存在任何编译器不遵守这些标准的问题,我建议您报告这些情况。
求解器的标准是另一回事。 MiniZinc仅对求解器实施最小的控制。如果要确保他们采用正确的标准,则必须与求解器的制造商进行验证。这就是为什么规范说它是实现定义的的原因,因为求解程序可能像大多数求解程序那样使用32位(例如Gecode),64位,或者使用完全不同的技术(例如间隔库)。