📄 coreaux.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: CoreAux.h * Synopsis: * Auxilliary functions * * Written by * Chee Yap <yap@cs.nyu.edu> * Chen Li <chenli@cs.nyu.edu> * Zilin Du <zilin@cs.nyu.edu> * * WWW URL: http://cs.nyu.edu/exact/ * Email: exact@cs.nyu.edu * * $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Core/include/CGAL/CORE/CoreAux.h $ * $Id: CoreAux.h 37060 2007-03-13 18:10:39Z reichel $ ***************************************************************************/#ifndef _CORE_COREAUX_H_#define _CORE_COREAUX_H_#include <iostream>#include <fstream>#include "CGAL/CORE/Impl.h"CORE_BEGIN_NAMESPACE#ifndef LONG_BIT // such as in Linux #define LONG_BIT (sizeof(long) * 8)#endif/// CORE_EPS is unit roundoff for IEEE standard double, i.e., 2^{-53}.// NOTES:// (1) CORE_EPS is used in our Floating Point Filter (Filter.h)// (2) 2^{-53} is called "unit roundoff" and// is the roundoff error for numbers in the range [1,2).// "Machine epsilon" is 2*CORE_EPS = 2^{-52}. It is the// smallest gap between two normal machine numbers --Chee 8/2003//// const double eps = (ldexp(1.0, -53)); // fails to link on SunPro#define CORE_EPS ((1.0/(1<<30))/(1<<23))// #define CORE_MACHINE_EPS ((1.0/(1<<30))/(1<<22))/// relEps is relative error for IEEE standard double, 1+2^{-52}.const double relEps = (1.0 + std::ldexp(1.0, -52));/// CORE_DIAGFILE is used for all warning and error messagesextern const char* CORE_DIAGFILE;/// template function returns the maximum value of twotemplate <class T>inline const T& core_max(const T& a, const T& b) { return ((a > b) ? a : b);}/// template function returns the minimum value of twotemplate <class T>inline const T& core_min(const T& a, const T& b) { return ((a < b) ? a : b);}/// template function returns the maximum value of threetemplate <class T>inline const T& core_max(const T& a, const T& b, const T& c) { return ((a > b) ? core_max(a, c) : core_max(b, c));}/// template function swaps two valuestemplate <class T>inline void core_swap(T& a, T& b) { T tmp; tmp = a; a = b; b = tmp;}/// template function rotate three valuestemplate <class T>inline void core_rotate(T& a, T& b, T& c) { T tmp; tmp = a; a = b; b = c; c = tmp;}/// template function returns the minimum value of threetemplate <class T>inline const T& core_min(const T& a, const T& b, const T& c) { return ((a < b) ? core_min(a, c) : core_min(b, c));}/// template function returns the absolute valuetemplate <class T>inline const T core_abs(const T& a) { return ((a < T(0)) ? -a : a);}/// returns floor log base 2 of abs(x)/** CONVENTION: lg(0) = -1 */int flrLg(long x);/// returns floor log base 2 of unsigned long x/** CONVENTION: lg(0) = -1 */int flrLg(unsigned long x);/// returns ceiling log base 2 of abs(x)/** CONVENTION: lg(0) = -1 */int clLg(long x);/// returns ceiling log base 2 of unsigned long x/** CONVENTION: lg(0) = -1 */int clLg(unsigned long x);/// gcd for machine type longlong gcd(long m, long n);/// abs for int typeinline int abs(int x) { return (x>=0) ? x : (-x);}/// abs for long typeinline long abs(long x) { return (x>=0) ? x : (-x);}/// sign for int typeinline int sign(int x) { return (x==0) ? 0 : ((x>0) ? 1 : (-1));}/// sign for long typeinline long sign(long x) { return (x==0) ? 0 : ((x>0) ? 1 : (-1));}/// overloaded << to print out std::stringinline std::ostream& operator<< (std::ostream& o, const std::string& s) { o << s.c_str(); return o;}/// implements the "integer mantissa" function// (See CORE_PATH/progs/ieee/frexp.cpp for details)double IntMantissa(double d);/// implements the "integer exponent" function// (See CORE_PATH/progs/ieee/frexp.cpp for details)int IntExponent(double d);/// Writes out an error or warning message in the local file CORE_DIAGFILE/** If last argument (err) is TRUE, then this is considered an error * (not just warning). In this case, the message is also printed in * std::cerr, using std::perror(). * */void core_error(std::string msg, std::string file, int lineno, bool err);/// This is for debugging messagesinline void core_debug(std::string msg){ std::cout << __FILE__ << "::" << __LINE__ << ": " << msg << std::endl;}CORE_END_NAMESPACE#endif // _CORE_COREAUX_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -