CGAL:将商转换为双倍

时间:2016-01-26 20:57:01

标签: c++ cgal

我在转换CGAL QP解算器时遇到问题

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 = -infd = inf

我们如何正确地将商数转换为双倍?

提前感谢您的任何建议!!

1 个答案:

答案 0 :(得分:3)

CGAL有一个功能CGAL::to_double,可以在most number types上使用,特别是on Quotient。对于这种分子和分母会溢出的情况,它具有special code。它确实具有下溢代码,这不能用整数商来实现,但可能会发生在Gmpzf中,产生0/0