2012-11-08 51 views

回答

1

好的。我认为我找到了解决方案。问题是我使用的确切内核只支持双精度,切换到不精确的内核解决了问题。也可以使用两倍。 (其中一个要求是使用支持高达2^48的整数的数据类型)。

+1

请注意,'Exact_predicates_exact_constructions_kernel'不会使用整数坐标,而是使用间隔算术,其中浮点数用于谓词和不精确的'double'算法用于构造。请记住接受你自己的答案。 – pmr

2

我猜你知道更改内核可能会对你的程序有其他影响。

关于你原来的问题,如果你的整数值大于2^51小,那么他们完全适合在双打(与53位尾数),所以一个简单的选择是投他们的两倍,如:

P sp0((double)x,(double)y); 

否则,Exact_predicates_exact_construction_kernel应该有它的主要数量型能够读取您的UINT64值(也许它们转换为unsigned long long是否确定你的平台上):

typedef K::FT FT; 

P sp0((FT)x,(FT)y); 
2

CGAL号码类型只记录与int和double进行互操作。我最近添加了一些代码,以便我们可以从long(用于Eigen)构建更多数字,并且在uint64_t为unsigned int或unsigned long的平台上,您的代码将在下一版本的CGAL中工作(除了您键入uint64_t)不是窗户)。对于很长时间的支持,由于我们的许多数字类型都基于其他库(GMP),它们本身不支持很长的时间,所以可能需要等一会儿。

相关问题