2013-08-06 19:52:53 -07:00
|
|
|
/*
|
|
|
|
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
|
|
|
Author: Soonho Kong
|
|
|
|
*/
|
2013-09-13 03:35:29 -07:00
|
|
|
#include <cmath>
|
2013-12-09 14:56:48 -08:00
|
|
|
#include "util/thread.h"
|
2013-09-12 20:04:10 -07:00
|
|
|
#include "util/numerics/numeric_traits.h"
|
|
|
|
#include "util/numerics/double.h"
|
2013-08-06 19:52:53 -07:00
|
|
|
|
|
|
|
namespace lean {
|
2014-06-07 10:18:32 -07:00
|
|
|
MK_THREAD_LOCAL_GET_DEF(mpfr_rnd_t, get_g_rnd);
|
2013-08-10 14:15:13 -07:00
|
|
|
void set_double_rnd(bool plus_inf) {
|
2014-06-07 10:18:32 -07:00
|
|
|
get_g_rnd() = plus_inf ? MPFR_RNDU : MPFR_RNDD;
|
2013-08-10 14:15:13 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
mpfr_rnd_t get_double_rnd() {
|
2014-06-07 10:18:32 -07:00
|
|
|
return get_g_rnd();
|
2013-08-10 14:15:13 -07:00
|
|
|
}
|
2013-08-06 19:52:53 -07:00
|
|
|
|
2013-08-13 20:05:04 -07:00
|
|
|
void double_power(double & v, unsigned k) { v = std::pow(v, k); }
|
|
|
|
void double_abs(double & v) { v = std::abs(v); }
|
|
|
|
void double_ceil(double & v) { v = std::ceil(v); }
|
|
|
|
void double_floor(double & v) { v = std::floor(v); }
|
|
|
|
|
2013-10-16 16:53:41 -07:00
|
|
|
static double g_zero = 0.0;
|
|
|
|
double const & numeric_traits<double>::zero() {
|
|
|
|
return g_zero;
|
|
|
|
}
|
2013-08-06 19:52:53 -07:00
|
|
|
};
|