CGAL:将商转换为双倍

CGAL: convert quotient to double

本文关键字:转换 CGAL      更新时间:2023-10-16

我在转换 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.

我们如何正确地将商转换为双精度?

提前

感谢您的任何建议!!

CGAL 有一个函数CGAL::to_double可用于大多数数字类型,尤其是商。它有特殊的代码,正是针对分子和分母溢出的情况。它没有用于下溢的代码,这不会发生在整数商中,但可能发生在 Gmpzf 中,产生0/0