我从CGAL开始。我想做的是创建坐标是数字〜2^51。
的点typedef CGAL::Exact_predicates_exact_constructions_kernel K;
typedef K::Point_2 P;
uint_64 x,y;
//init them somehow
P sp0(x,y);
然后我有一个长的模板错误。有人可以帮忙吗?
我想您意识到更改内核可能会对您的程序有其他影响。
关于您的原始问题,如果您的整数值小于2^51,则它们完全适合双打(带有53位Mantissa),因此,一个简单的选择是将它们施加到一倍,如:
P sp0((double)x,(double)y);
否则,Exact_predicates_exact_construction_kernel应该具有其主要数字类型可以读取您的UINT64值(如果在您的平台上还可以,则可以将它们施加到无签名的长度长):
>typedef K::FT FT;
P sp0((FT)x,(FT)y);
CGAL数字类型仅记录在与int和double互操作的情况下。我最近添加了一些代码,以便我们可以从Long(eigen需要)构造更多数字,并且您的代码将在下一版本的CGAL中使用(除了您在Uint64_t是Unsigned Int或无签名的long的平台上输入了UINT64_T)不是Windows)。对于长期的长期支持,由于我们的许多数字类型都基于其他库(GMP),这些图书馆尚不支持长时间长时间,因此它可能需要等待一点。
好。我认为我找到了解决方案。问题是我使用了仅支持双倍支持的精确核,切换到不精确的内核解决了问题。也只能使用双倍。(其中之一是使用支持最多2^48 Intergers的数据类型)。