Я использую Пармскую многогранную библиотеку (PPL) сделать перечисление вершин заданного многогранника. Это обсуждалось Вот. Однако я не могу понять, как использовать рациональные числа вместо целых чисел в вычислениях.
Приведенный ниже код генерирует отрезок [0.3,3.7] (выпуклый многогранник в 1 измерении), и PPL возвращает два целых числа {0,3}, но я хочу рациональные числа {0.3,3.7}. Как я могу посоветовать PPL использовать рациональные числа (арифметика с плавающей запятой)?
#include <cstddef>
#include <stdio.h>
#include "ppl.hh"
using namespace Parma_Polyhedra_Library;
int main() {
Variable x(0);
C_Polyhedron ph(1);
ph.refine_with_constraint( x <= 3.7);
ph.refine_with_constraint( x >= 0.3);
Generator_System gs = ph.generators();
for(Generator_System::const_iterator it = gs.begin(); it != gs.end(); it++) {
const Generator& g = *it;
std::cout << g.coefficient(x) << std::endl;
}
return 0;
}
PPL ожидает целых чисел в определении своих ограничений. Вам придется масштабировать свое неравенство с общим знаменателем.
Других решений пока нет …