dust3d/thirdparty/cgal/CGAL-4.13/include/CGAL/Gmpfr.h

189 lines
5.6 KiB
C
Raw Normal View History

// Copyright (c) 2007-2009 Inria Lorraine (France). All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 3 of the License,
// or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
// SPDX-License-Identifier: LGPL-3.0+
//
// Author: Luis Peñaranda <luis.penaranda@gmx.com>
#ifndef CGAL_GMPFR_H
#define CGAL_GMPFR_H
#include <CGAL/number_type_basic.h>
#include <CGAL/mpfr_coercion_traits.h>
namespace CGAL{
template <>
class Algebraic_structure_traits<Gmpfr>:
public Algebraic_structure_traits_base<Gmpfr,Field_with_kth_root_tag>{
public:
typedef Tag_false Is_exact;
typedef Tag_true Is_numerical_sensitive;
typedef bool Boolean;
struct Is_zero:
public CGAL::cpp98::unary_function<Type,Boolean>{
Boolean operator()(const Type &x)const{
return x.is_zero();
}
};
struct Is_one:
public CGAL::cpp98::unary_function<Type,Boolean>{
Boolean operator()(const Type &x)const{
return x.is_one();
}
};
struct Square:
public CGAL::cpp98::unary_function<Type,Type>{
Type operator()(const Type &x)const{
return x.square();
};
};
struct Is_square:
public CGAL::cpp98::binary_function<Type,Type&,Boolean>{
Boolean operator()(const Type &x,Type &y)const{
return x.is_square(y);
};
Boolean operator()(const Type &x)const{
return x.is_square();
};
};
struct Sqrt:
public CGAL::cpp98::unary_function<Type,Type>{
Type operator()(const Type &x)const{
return x.sqrt();
};
};
struct Kth_Root:
public CGAL::cpp98::binary_function<int,Type,Type>{
Type operator()(int k,const Type &x)const{
return (k==3?x.cbrt():x.kthroot(k));
};
};
};
template <>
class Real_embeddable_traits<Gmpfr>:
public INTERN_RET::Real_embeddable_traits_base<Gmpfr,CGAL::Tag_true>{
typedef Algebraic_structure_traits<Type> AST;
public:
typedef Tag_true Is_real_embeddable;
typedef bool Boolean;
typedef CGAL::Comparison_result Comparison_result;
typedef CGAL::Sign Sign;
typedef AST::Is_zero Is_zero;
struct Is_finite:
public CGAL::cpp98::unary_function<Type,Boolean>{
inline Boolean operator()(const Type &x)const{
return(x.is_number());
};
};
struct Abs:
public CGAL::cpp98::unary_function<Type,Type>{
inline Type operator()(const Type &x)const{
return x.abs();
};
};
struct Sgn:
public CGAL::cpp98::unary_function<Type,Sign>{
inline Sign operator()(const Type &x)const{
return x.sign();
};
};
struct Is_positive:
public CGAL::cpp98::unary_function<Type,Boolean>{
inline Boolean operator()(const Type &x)const{
return(x.sign()==POSITIVE);
};
};
struct Is_negative:
public CGAL::cpp98::unary_function<Type,Boolean>{
inline Boolean operator()(const Type &x)const{
return(x.sign()==NEGATIVE);
};
};
struct Compare:
public CGAL::cpp98::binary_function<Type,Type,Comparison_result>{
inline Comparison_result operator()
(const Type &x,const Type &y)const{
return x.compare(y);
};
CGAL_IMPLICIT_INTEROPERABLE_BINARY_OPERATOR_WITH_RT(Type,Comparison_result)
};
struct To_double:
public CGAL::cpp98::unary_function<Type,double>{
inline double operator()(const Type &x)const{
return x.to_double();
};
};
struct To_interval:
public CGAL::cpp98::unary_function<Type,std::pair<double,double> >{
inline std::pair<double,double>operator()(const Type &x)const{
return x.to_interval();
};
};
};
}
namespace Eigen {
template<class> struct NumTraits;
template<> struct NumTraits<CGAL::Gmpfr>
{
typedef CGAL::Gmpfr Real;
typedef CGAL::Gmpfr NonInteger;
typedef CGAL::Gmpfr Nested;
typedef CGAL::Gmpfr Literal;
static inline Real epsilon() { return 0; }
static inline Real dummy_precision() { return 0; }
enum {
IsInteger = 0,
IsSigned = 1,
IsComplex = 0,
RequireInitialization = 1,
ReadCost = 6,
AddCost = 50,
MulCost = 50
};
};
}
#include <CGAL/GMP/Gmpfr_type.h>
#include <CGAL/GMP_arithmetic_kernel.h>
#endif // CGAL_GMPFR_H
// vim: tabstop=8: softtabstop=8: smarttab: shiftwidth=8: expandtab