/////////////////////////////////////////////////////////////////////////
//                                                                     //
// This file contains some definitions specific to the precision of    //
// the floating point numbers in this project.                         //
//                                                                     //
/////////////////////////////////////////////////////////////////////////
#ifndef __REAL_HPP__
#define __REAL_HPP__




#define USE_DOUBLE




/////////////////////////////////////////////////////////////////////////
//                                                                     //
// Definitions depending on the type of real value that will be used   //
// (float ou double)                                                   //
//                                                                     //
/////////////////////////////////////////////////////////////////////////
#ifdef USE_FLOAT


typedef float real_t;
#define MAKE_REAL(x) (x##f)


#elif defined USE_DOUBLE


typedef double real_t;
#define MAKE_REAL(x) (x)


#endif



#include "popassert.hpp"
#include <limits>

inline real_t infinity()
{
  POP_ASSERT(std::numeric_limits<real_t>::has_infinity,
             "Infinity is not supported for this type.");
  return std::numeric_limits<real_t>::infinity();
}

static const real_t PI = MAKE_REAL(3.1415926535897932384626433832795);


#endif // __REAL_HPP__
