Минимальное и максимальное значения с плавающей точкой в MiniZinc
Из спецификации MiniZinc:
Поплавки представляют собой действительные числа. Представления с плавающей точкой определяются реализацией. Это означает, что представимый диапазон и точность значений с плавающей точкой определяются реализацией. Однако реализация должна прерваться во время выполнения при исключительных операциях с плавающей точкой (например, тех, которые генерируют NaN, если используется IEEE754 с плавающей точкой).
Что это означает, что представления Float определяются реализацией? Зависит ли это от решателя, который будет использоваться?
И как представление Float обрабатывается инструментом mzn2fzn? С чем это связано?
1 ответ
MiniZinc старается придерживаться стандарта IEEE. Сам компилятор (minizinc
водитель или его старший брат mzn2fzn
) придерживается этого стандарта, насколько мне известно. Внутренне компилятор использует 64-битную точность для своих значений с плавающей запятой. Если есть какие-либо проблемы, когда компилятор не придерживается этих стандартов, я рекомендую вам сообщить о них.
Стандарты для решателей - это другое дело. MiniZinc только обеспечивает минимальный контроль над решателями. Если вы хотите убедиться, что они используют правильные стандарты, вы должны будете уточнить у производителя решателя. Вот почему в спецификации говорится, что это определяется реализацией, так как решатель может использовать 32-битные, такие как Gecode, 64-битные, как это делают большинство решателей, или совершенно другой метод, такой как библиотека интервалов.