⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 promote.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
/**************************************************************************** * Core Library Version 1.7, August 2004 * Copyright (c) 1995-2004 Exact Computation Project * All rights reserved. * * This file is part of CORE (http://cs.nyu.edu/exact/core/); you may * redistribute it under the terms of the Q Public License version 1.0. * See the file LICENSE.QPL distributed with CORE. * * 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. * * * File: Expr.h * Synopsis: a class of Expression in Level 3 * * Written by *       Koji Ouchi <ouchi@simulation.nyu.edu> *       Chee Yap <yap@cs.nyu.edu> *       Igor Pechtchanski <pechtcha@cs.nyu.edu> *       Vijay Karamcheti <vijayk@cs.nyu.edu> *       Chen Li <chenli@cs.nyu.edu> *       Zilin Du <zilin@cs.nyu.edu> *       Sylvain Pion <pion@cs.nyu.edu> *       Vikram Sharma<sharma@cs.nyu.edu> * * WWW URL: http://cs.nyu.edu/exact/ * Email: exact@cs.nyu.edu * * $Source: /home/exact/cvsroot/exact/corelib/inc/CORE/Promote.h,v $ * $Revision: 37060 $ $Date: 2007-03-13 19:10:39 +0100 (Tue, 13 Mar 2007) $ ***************************************************************************/#ifndef __PROMOTE_H__#define __PROMOTE_H__#include <CGAL/CORE/Impl.h>CORE_BEGIN_NAMESPACE/// hasExactDivision()///   CHECKING if NT has exact division///   NOTE: it is important that the compiler does not try to///   prove theorems about arithmetic identities like "x*(y/x) == y"///   USAGE:  If you want to check if a number type NT has exact division, do for example,///            if (hasExactDivision< NT >::check()) ...///   		We use this in Polynomial<NT> class.template < class NT >struct hasExactDivision {  static bool check() {		// This default function is supposed to work for NT other than BigRat or Expr     return false;  }};template<> struct hasExactDivision<Expr> {  static bool check() {     return true;  }};template<> struct hasExactDivision<BigRat> {  static bool check() {     return true;  }};template<typename T1, typename T2>class Promotion;template<typename T>class Promotion<T, T> {  public:    typedef T ResultT;};#define MAX_TYPE(T1, T2)		\  typename Promotion<T1, T2>::ResultT#define DEFINE_MAX_TYPE(T1, T2, Tr)	\  template<> class Promotion<T1, T2> {	\    public:				\      typedef Tr ResultT;		\  };					\  template<> class Promotion<T2, T1> {	\    public:				\      typedef Tr ResultT;		\  };/* * For example: * * DEFINE_MAX_TYPE(BigInt, BigRat, BigRat)   	// define the promotion * * template<typename T1, typename T2> 		// define function f with type templates *   MAX_TYPE(T1, T2) f(T1& , T2& ); * * or * * template<typename T1, typename T2> 		// define function f with type templates *   const MAX_TYPE(T1, T2)& f(T1& , T2& ); * * BigInt  a  =  1; * BigRat  b  = "1/3"; * BigRat  c  =  f(a, b);			// or, typename Promotion<BigInt, BigRat>::ResultT c = f(a,b); * * REMARK: this mechanism is used by the eval function for polynomial evaluation (see Poly.tcc) * where the two types are NT (type of coefficients) and N (type of evaluation point). *//*  * primary types: (11) * * 	bool,  *	char, unsigned char,  *	short, unsigned short, * 	int, unsigned int,  *	long, unsigned long,  *	float, double * * CORE types: (5) * * 	BigInt < BigFloat < BigRat < Real < Expr * *      (NOTE: BigFloat here must be error-free) * */class BigInt;class BigFloat;class BigRat;class Expr;DEFINE_MAX_TYPE(long, BigInt, BigInt)DEFINE_MAX_TYPE(long, BigFloat, BigFloat)DEFINE_MAX_TYPE(long, BigRat, BigRat)DEFINE_MAX_TYPE(long, Expr, Expr)DEFINE_MAX_TYPE(int, BigInt, BigInt)DEFINE_MAX_TYPE(int, BigFloat, BigFloat)DEFINE_MAX_TYPE(int, BigRat, BigRat)DEFINE_MAX_TYPE(int, Expr, Expr)DEFINE_MAX_TYPE(BigInt, BigFloat, BigFloat)DEFINE_MAX_TYPE(BigInt, BigRat, BigRat)DEFINE_MAX_TYPE(BigInt, Expr, Expr)DEFINE_MAX_TYPE(BigFloat, BigRat, BigRat)DEFINE_MAX_TYPE(BigFloat, Expr, Expr)DEFINE_MAX_TYPE(BigRat, Expr, Expr)CORE_END_NAMESPACE#endif //__PROMOTE_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -