diff --git a/CGAL_Core/examples/Core/CMakeLists.txt b/CGAL_Core/examples/Core/CMakeLists.txt index d4513e22dea4..6d9e732db932 100644 --- a/CGAL_Core/examples/Core/CMakeLists.txt +++ b/CGAL_Core/examples/Core/CMakeLists.txt @@ -9,4 +9,5 @@ if(NOT CGAL_Core_FOUND) return() endif() +create_single_source_cgal_program("zero-one.cpp") create_single_source_cgal_program("delaunay.cpp") diff --git a/CGAL_Core/examples/Core/zero-one.cpp b/CGAL_Core/examples/Core/zero-one.cpp new file mode 100644 index 000000000000..cfc5a903c19b --- /dev/null +++ b/CGAL_Core/examples/Core/zero-one.cpp @@ -0,0 +1,32 @@ + +#include + +typedef CORE::Expr Real; + +int main() +{ + Real r(3.14); + + CGAL::is_zero(r); + + CGAL::is_one(r); + + r = CGAL::sqrt(r); + + + CGAL::is_zero(r); + + CGAL::is_one(r); + + r = r * r; + + CGAL::is_zero(r); + + CGAL::is_one(r); + + r = r - r; + + CGAL::is_zero(r); + + return 0; +} diff --git a/Number_types/include/CGAL/CORE_Expr.h b/Number_types/include/CGAL/CORE_Expr.h index efeb5ad9363a..3ddb4c7f78fd 100644 --- a/Number_types/include/CGAL/CORE_Expr.h +++ b/Number_types/include/CGAL/CORE_Expr.h @@ -123,6 +123,22 @@ template <> class Algebraic_structure_traits< CORE::Expr > } }; + class Is_one + : public CGAL::cpp98::unary_function< Type, bool > { + public: + bool operator()( const Type& x ) const { + double inf, sup; + x.doubleInterval(inf,sup); + if((inf > 1) || (sup < 1)){ + return false; + } + if((inf == 1) && (sup == 1)){ + return true; + } + return x.cmp(Type::getOne()); + } + }; + }; template <> class Real_embeddable_traits< CORE::Expr >