Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Exact to Double Conversion Error

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Exact to Double Conversion Error


Chronological Thread 
  • From: "Laurent Rineau (CGAL/GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Exact to Double Conversion Error
  • Date: Wed, 22 Jul 2020 11:13:53 +0200
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=SoftFail ; spf=None
  • Ironport-phdr: 9a23:GX3pfRbi9lyo6nzFy19aSVn/LSx+4OfEezUN459isYplN5qZrsu8bnLW6fgltlLVR4KTs6sC17OI9fyxEjVaqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba5zIRmsogjcssYajZZ8Jq0s1hbHv3xEdvhMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTDQhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlSEKPCM7/m7KkMx9lKJVrgy8qRJxwIDUZ4OaNPRxca3SYdwXXnZBUNtLWiBdHo+wc5UDAuwcNuhYtYn9oF4OoAOwCQeqHuzv1yVIiWHw3a0mzu8vDQDG3Ao+EN0UrXTfsdH5ObkTX+2pyqfE1jTNYO1R2Tf49ofIbgohoPGMU71qbcXR1U4vFxnFj1mVp4DuIjSY1uAXvGiG9epvS+Svi3I9pwFrozivwNkjhZPUho8O1l/E+j92wIIvKd2/Uk57bsepHZ1NvC6VK4V4WNktQ310uCkk0L0Gv4a2cigOxZg7xRPSaP2KfomU7x7/WuudPyt0iXxqdb6imRq/9VStx+PgW8SqzlpHrShIn93Mu34D1xLe99SLR/9j8kqnxD2B2QfT6uReLkA1k6rWM5EhzaA3lpoWr0vDAjX2mUX4jKCMakok5u+o6/7nY7n8upCcMIp0hhniPaQhgMO/Bf40Mg8UX2iU/+m3yb7t/VXhTblXkPE7lrPVvI3eKMkfvKK0Bw5Y3pws5hqjFzuqzcgUkH0dIF5bZR6Lk5LlNl7BLfziDfqyhUmnni1xyPDcJLLhB43ALnjdn7flerZw80hcxxQ9zdxF+Z1UDKoBLOj9Wk/rrNDYDxk5PBKow+v/FdlxyIcTVXiSDqKdNK7eq1uF6+M1L+SDeIMZoDP9JOIk5/7qg385g1gdfayx0JsTcn+4A+5mLFufYXrwmNsBC2YKvgwgQ+PwlV2PSiJcZ3moUKI4/D07D5imDYjbSoC3nLOBxDu7HoFRZm1eFl+MHm3nd4GdV/gRaSKSOdNukiEfVbi6UIIhzhGvtAriy7V9NObU+ysYtYji1Ndv/eHTmwsypnRICJGW3GiJCm11hWgVXCQe3aZloEU7xE3Q/7J/hqkSMdVO/f5PTk8ANJjRxvEyS/vdcyaGUdqOTVu6WMSICDotScgggpVGN0J0Bs+viAyFxSusDrYIv7eEDZhy9bjTiSuib/1hwmrLgfFyx2ItRdFCYDX/2vxPsjPLDouMqH230r6wfP1EjiXC/WPFynCB7hkBDVxAFJ7dVHVaXXP46NT04kSbFe2oBLphPw1aj8CYePMTO4/ZyG5eTfKmA+zwJme4mmO+HxGNn+veZ4XjfyMaxiqPU0U=
  • Organization: GeometryFactory

On Monday, July 20, 2020 12:54:54 PM CEST Myirci wrote:
> Hi all,
>
> I had been using CGAL actively for about 4 years ago and I have a project
> which I wanted to rebuild with the more recent version of CGAL 5.1 beta1. I
> have sorted out most of the compile errors but one simple thing caused lots
> of trouble which was working perfectly in the past but I cannot make it
> work right now. The error is related to a basic conversion from exact
> numbers such as CGAL::Gmpq, CGAL::Gmpz to double using the CGAL API such as
> CGAL::to_double() and CGAL::to_interval().
>
> I wrote down a sample code (based on the example in the CGAL documentation
> for Algebraic Kernels)
[...]
> test.cpp:
> ----------------------------------------------------------------------------
> -----------------------------------
>
> #include <CGAL/config.h>
> #include <CGAL/Algebraic_kernel_d_1.h>
> #include <CGAL/Gmpz.h>
> #include <vector>
>
> typedef CGAL::Algebraic_kernel_d_1<CGAL::Gmpz> AK;
> typedef AK::Coefficient Coefficient;
> typedef AK::Polynomial_1 Polynomial_1;
> typedef AK::Algebraic_real_1 Algebraic_real_1;
> typedef AK::Bound Bound;
> typedef std::pair<Bound,Bound> Interval;

Hi Myirci, to use to_interval with the GMP algebraic kernel, you need the
MPFI library. Maybe on your older machine, MPFI was available.

If you do not have MPFI, you can use the CORE algebraic kernel, that way:

//--------------
#include <CGAL/config.h>
#include <CGAL/Algebraic_kernel_d_1.h>
#include <vector>

typedef CGAL::Algebraic_kernel_d_1<CORE::BigInt> AK;
typedef AK::Coefficient Coefficient;
typedef AK::Polynomial_1 Polynomial_1;
typedef AK::Algebraic_real_1 Algebraic_real_1;
typedef AK::Bound Bound;
typedef std::pair<Bound,Bound> Interval;

int main()
{
AK ak;
AK::Construct_algebraic_real_1 construct_algebraic_real_1 =
ak.construct_algebraic_real_1_object();
Polynomial_1 x = CGAL::shift(AK::Polynomial_1(1),1); // the monomial x
Algebraic_real_1 a = construct_algebraic_real_1(x*x-2,1); // sqrt(2)

std::cout << "sign of a is : " << CGAL::sign(a) <<
"\n";
std::cout << "double approximation of a is : " << CGAL::to_double(a) <<
"\n";
std::cout << "double lower bound of a : " <<
CGAL::to_interval(a).first << "\n";
std::cout << "double upper bound of a : " <<
CGAL::to_interval(a).second << "\n";

return 0;
}
//--------------


--
Laurent Rineau, PhD
R&D Engineer at GeometryFactory http://www.geometryfactory.com/
Release Manager of the CGAL Project http://www.cgal.org/






Archive powered by MHonArc 2.6.19+.

Top of Page