Библиотека Пармских многогранников: перечисление вершин и арифметика с плавающей точкой

Я использую Пармскую многогранную библиотеку (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;
}

0

Решение

PPL ожидает целых чисел в определении своих ограничений. Вам придется масштабировать свое неравенство с общим знаменателем.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]