2016-01-26 3 views
1

Я имею проблему в преобразовании CGAL QP решательCGAL: преобразовать фактор двойной

typedef CGAL::Gmpzf ET; 
...define a quadratic program qp here... 
Solution s = CGAL::solve_quadratic_program(qp, ET()); 
assert (s.solves_quadratic_program(qp)); 
cout<<"QP objective = "<<s.objective_value()<<endl; 
// The above returns a value of type CGAL::Quotient<ET> 
// and I need to convert it to double 
double n = s.objective_value_numerator().to_double(); 
double d = s.objective_value_denominator().to_double(); 
cout<<"QP objective 2 = "<<n/d<<endl; 

я получил:

QP objective = -2.57497e-22/2.01459e-22 
QP objective 2 = -nan 

Я проверил и заметил, что n = -inf и d = inf.

Как правильно преобразовать котировочный код в двойное?

Благодарим вас за любые предложения!

+0

'CGAL :: to_double (х)' http://doc.cgal.org/latest/Number_types/classCGAL_1_1Quotient.html#a4eda6b19dcdfb5a9735531d338c8f721 –

+0

@MarcGlisse: Это ответ на мой вопрос. Пожалуйста, разместите его как ответ, чтобы я мог его принять. Большое спасибо!!! – Khue

ответ

3

CGAL имеет функцию CGAL::to_double, которая может использоваться на most number types и, в частности, on Quotient. Он имеет special code именно для этого случая, когда числитель и знаменатель будут переполняться. Он не имеет код для underflow, который не может произойти с частным целым числом, но может произойти с Gmpzf, давая 0/0.

Смежные вопросы