Fix precision problem in interval<T>::cos
This commit is contained in:
parent
eb29a67395
commit
f87b4394d3
1 changed files with 2 additions and 2 deletions
|
@ -1166,7 +1166,7 @@ template<typename T> void interval<T>::cos () {
|
||||||
m_lower_open = m_upper_open = false;
|
m_lower_open = m_upper_open = false;
|
||||||
m_lower_inf = m_upper_inf = false;
|
m_lower_inf = m_upper_inf = false;
|
||||||
T const pi_twice = numeric_traits<T>::pi_twice();
|
T const pi_twice = numeric_traits<T>::pi_twice();
|
||||||
fmod(pi_twice);
|
fmod(interval<T>(numeric_traits<T>::pi_twice_lower(), numeric_traits<T>::pi_twice_upper()));
|
||||||
if(m_upper - m_lower >= pi_twice) {
|
if(m_upper - m_lower >= pi_twice) {
|
||||||
// If the input width is bigger than 2pi,
|
// If the input width is bigger than 2pi,
|
||||||
// it covers whole domain and gets [-1.0, 1.0]
|
// it covers whole domain and gets [-1.0, 1.0]
|
||||||
|
@ -1178,7 +1178,7 @@ template<typename T> void interval<T>::cos () {
|
||||||
if(m_lower >= numeric_traits<T>::pi_upper()) {
|
if(m_lower >= numeric_traits<T>::pi_upper()) {
|
||||||
// If the input is bigger than pi, we handle it recursively by the fact:
|
// If the input is bigger than pi, we handle it recursively by the fact:
|
||||||
// cos(x) = -cos(x - pi)
|
// cos(x) = -cos(x - pi)
|
||||||
*this -= numeric_traits<T>::pi();
|
*this -= interval<T>(numeric_traits<T>::pi_lower(), numeric_traits<T>::pi_upper());
|
||||||
cos();
|
cos();
|
||||||
neg();
|
neg();
|
||||||
lean_assert(check_invariant());
|
lean_assert(check_invariant());
|
||||||
|
|
Loading…
Reference in a new issue