Skip to content

Commit 1a5106f

Browse files
committed
replace epsilon() with min()
1 parent c6a4561 commit 1a5106f

31 files changed

+83
-96
lines changed

include/gcem_incl/acos.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ noexcept
3838
abs(x) > T(1) ? \
3939
GCLIM<T>::quiet_NaN() :
4040
// indistinguishable from one or zero
41-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
41+
GCLIM<T>::min() > abs(x - T(1)) ? \
4242
T(0) :
43-
GCLIM<T>::epsilon() > abs(x) ? \
43+
GCLIM<T>::min() > abs(x) ? \
4444
T(GCEM_HALF_PI) :
4545
// else
4646
atan( sqrt(T(1) - x*x)/x ) );

include/gcem_incl/acosh.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ noexcept
4141
x < T(1) ? \
4242
GCLIM<T>::quiet_NaN() :
4343
// indistinguishable from 1
44-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
44+
GCLIM<T>::min() > abs(x - T(1)) ? \
4545
T(0) :
4646
// else
4747
log( x + sqrt(x*x - T(1)) ) );

include/gcem_incl/asin.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ noexcept
3838
x > T(1) ? \
3939
GCLIM<T>::quiet_NaN() :
4040
// indistinguishable from one or zero
41-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
41+
GCLIM<T>::min() > abs(x - T(1)) ? \
4242
T(GCEM_HALF_PI) :
43-
GCLIM<T>::epsilon() > abs(x) ? \
43+
GCLIM<T>::min() > abs(x) ? \
4444
T(0) :
4545
// else
4646
atan( x/sqrt(T(1) - x*x) ) );

include/gcem_incl/asinh.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ noexcept
3838
is_nan(x) ? \
3939
GCLIM<T>::quiet_NaN() :
4040
// indistinguishable from zero
41-
GCLIM<T>::epsilon() > abs(x) ? \
41+
GCLIM<T>::min() > abs(x) ? \
4242
T(0) :
4343
// else
4444
log( x + sqrt(x*x + T(1)) ) );

include/gcem_incl/atan.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ noexcept
126126
is_nan(x) ? \
127127
GCLIM<T>::quiet_NaN() :
128128
// indistinguishable from zero
129-
GCLIM<T>::epsilon() > abs(x) ? \
129+
GCLIM<T>::min() > abs(x) ? \
130130
T(0) :
131131
// negative or positive
132132
x < T(0) ? \

include/gcem_incl/atan2.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ noexcept
3838
any_nan(y,x) ? \
3939
GCLIM<T>::quiet_NaN() :
4040
//
41-
GCLIM<T>::epsilon() > abs(x) ? \
41+
GCLIM<T>::min() > abs(x) ? \
4242
//
43-
GCLIM<T>::epsilon() > abs(y) ? \
43+
GCLIM<T>::min() > abs(y) ? \
4444
neg_zero(y) ? \
4545
neg_zero(x) ? - T(GCEM_PI) : - T(0) :
4646
neg_zero(x) ? T(GCEM_PI) : T(0) :

include/gcem_incl/atanh.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ noexcept
4949
// function is defined for |x| < 1
5050
T(1) < abs(x) ? \
5151
GCLIM<T>::quiet_NaN() :
52-
GCLIM<T>::epsilon() > (T(1) - abs(x)) ? \
52+
GCLIM<T>::min() > (T(1) - abs(x)) ? \
5353
sgn(x)*GCLIM<T>::infinity() :
5454
// indistinguishable from zero
55-
GCLIM<T>::epsilon() > abs(x) ? \
55+
GCLIM<T>::min() > abs(x) ? \
5656
T(0) :
5757
// else
5858
atanh_compute(x) );

include/gcem_incl/ceil.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ noexcept
5555
!is_finite(x) ? \
5656
x :
5757
// signed-zero cases
58-
GCLIM<T>::epsilon() > abs(x) ? \
58+
GCLIM<T>::min() > abs(x) ? \
5959
x :
6060
// else
6161
ceil_int(x, T(static_cast<llint_t>(x))) );

include/gcem_incl/cos.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,16 @@ noexcept
4747
is_nan(x) ? \
4848
GCLIM<T>::quiet_NaN() :
4949
// indistinguishable from 0
50-
GCLIM<T>::epsilon() > abs(x) ?
50+
GCLIM<T>::min() > abs(x) ?
5151
T(1) :
5252
// special cases: pi/2 and pi
53-
GCLIM<T>::epsilon() > abs(x - T(GCEM_HALF_PI)) ? \
53+
GCLIM<T>::min() > abs(x - T(GCEM_HALF_PI)) ? \
5454
T(0) :
55-
GCLIM<T>::epsilon() > abs(x + T(GCEM_HALF_PI)) ? \
55+
GCLIM<T>::min() > abs(x + T(GCEM_HALF_PI)) ? \
5656
T(0) :
57-
GCLIM<T>::epsilon() > abs(x - T(GCEM_PI)) ? \
57+
GCLIM<T>::min() > abs(x - T(GCEM_PI)) ? \
5858
- T(1) :
59-
GCLIM<T>::epsilon() > abs(x + T(GCEM_PI)) ? \
59+
GCLIM<T>::min() > abs(x + T(GCEM_PI)) ? \
6060
- T(1) :
6161
// else
6262
cos_compute( tan(x/T(2)) ) );

include/gcem_incl/cosh.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ noexcept
3838
is_nan(x) ? \
3939
GCLIM<T>::quiet_NaN() :
4040
// indistinguishable from zero
41-
GCLIM<T>::epsilon() > abs(x) ? \
41+
GCLIM<T>::min() > abs(x) ? \
4242
T(1) :
4343
// else
4444
(exp(x) + exp(-x)) / T(2) );

include/gcem_incl/erf.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ noexcept
6565
{
6666
return( depth < GCEM_ERF_MAX_ITER ? \
6767
// if
68-
(2*depth - 1) - 2*xx \
68+
(2*depth - T(1)) - 2*xx \
6969
+ 4*depth*xx / erf_cf_small_recur(xx,depth+1) :
7070
// else
71-
(2*depth - 1) - 2*xx );
71+
(2*depth - T(1)) - 2*xx );
7272
}
7373

7474
template<typename T>
@@ -111,7 +111,7 @@ noexcept
111111
is_neginf(x) ? \
112112
- T(1) :
113113
// indistinguishable from zero
114-
GCLIM<T>::epsilon() > abs(x) ? \
114+
GCLIM<T>::min() > abs(x) ? \
115115
T(0) :
116116
// else
117117
x < T(0) ? \

include/gcem_incl/erf_inv.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,10 @@ noexcept
227227
abs(p) > T(1) ? \
228228
GCLIM<T>::quiet_NaN() :
229229
// indistinguishable from 1
230-
GCLIM<T>::epsilon() > abs(T(1) - p) ? \
230+
GCLIM<T>::min() > abs(T(1) - p) ? \
231231
GCLIM<T>::infinity() :
232232
// indistinguishable from - 1
233-
GCLIM<T>::epsilon() > abs(T(1) + p) ? \
233+
GCLIM<T>::min() > abs(T(1) + p) ? \
234234
- GCLIM<T>::infinity() :
235235
// else
236236
erf_inv_recur_begin(erf_inv_initial_val(p),p) );

include/gcem_incl/exp.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ noexcept
7373
is_neginf(x) ? \
7474
T(0) :
7575
//
76-
GCLIM<T>::epsilon() > abs(x) ? \
76+
GCLIM<T>::min() > abs(x) ? \
7777
T(1) :
7878
//
7979
is_posinf(x) ? \

include/gcem_incl/floor.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ noexcept
5555
!is_finite(x) ? \
5656
x :
5757
// signed-zero cases
58-
GCLIM<T>::epsilon() > abs(x) ? \
58+
GCLIM<T>::min() > abs(x) ? \
5959
x :
6060
// else
6161
floor_int(x, T(static_cast<llint_t>(x))) );

include/gcem_incl/gcem_options.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
#endif
5050

5151
#ifndef GCEM_VERSION_PATCH
52-
#define GCEM_VERSION_PATCH 0
52+
#define GCEM_VERSION_PATCH 1
5353
#endif
5454

5555
//
@@ -130,7 +130,7 @@ namespace gcem
130130
#endif
131131

132132
#ifndef GCEM_ERF_INV_MAX_ITER
133-
#define GCEM_ERF_INV_MAX_ITER 55
133+
#define GCEM_ERF_INV_MAX_ITER 60
134134
#endif
135135

136136
#ifndef GCEM_EXP_MAX_ITER_SMALL

include/gcem_incl/incomplete_beta.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ noexcept
142142
any_nan(a, b, z) ? \
143143
GCLIM<T>::quiet_NaN() :
144144
// indistinguishable from zero
145-
GCLIM<T>::epsilon() > z ? \
145+
GCLIM<T>::min() > z ? \
146146
T(0) :
147147
// parameter check for performance
148148
(a + T(1))/(a + b + T(2)) > z ? \

include/gcem_incl/incomplete_beta_inv.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@ incomplete_beta_inv_deriv_1(const T value, const T alpha_par, const T beta_par,
201201
noexcept
202202
{ // derivative of the incomplete beta function w.r.t. x
203203
return( // indistinguishable from zero or one
204-
GCLIM<T>::epsilon() > abs(value) ? \
204+
GCLIM<T>::min() > abs(value) ? \
205205
T(0) :
206-
GCLIM<T>::epsilon() > abs(T(1) - value) ? \
206+
GCLIM<T>::min() > abs(T(1) - value) ? \
207207
T(0) :
208208
// else
209209
exp( (alpha_par - T(1))*log(value) + (beta_par - T(1))*log(T(1) - value) - lb_val ) );
@@ -253,7 +253,7 @@ incomplete_beta_inv_recur(const T value, const T alpha_par, const T beta_par, co
253253
noexcept
254254
{
255255
return( // derivative = 0
256-
GCLIM<T>::epsilon() > abs(deriv_1) ? \
256+
GCLIM<T>::min() > abs(deriv_1) ? \
257257
incomplete_beta_inv_decision( value, alpha_par, beta_par, p, T(0), lb_val,
258258
GCEM_INCML_BETA_INV_MAX_ITER+1) :
259259
// else
@@ -301,9 +301,9 @@ noexcept
301301
any_nan(alpha_par, beta_par, p) ? \
302302
GCLIM<T>::quiet_NaN() :
303303
// indistinguishable from zero or one
304-
GCLIM<T>::epsilon() > p ? \
304+
GCLIM<T>::min() > p ? \
305305
T(0) :
306-
GCLIM<T>::epsilon() > abs(T(1) - p) ? \
306+
GCLIM<T>::min() > abs(T(1) - p) ? \
307307
T(1) :
308308
// else
309309
incomplete_beta_inv_begin(incomplete_beta_inv_initial_val(alpha_par,beta_par,p),

include/gcem_incl/incomplete_gamma.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,10 @@ noexcept
194194
a < T(0) ? \
195195
GCLIM<T>::quiet_NaN() :
196196
//
197-
GCLIM<T>::epsilon() > z ? \
197+
GCLIM<T>::min() > z ? \
198198
T(0) :
199199
//
200-
GCLIM<T>::epsilon() > a ? \
200+
GCLIM<T>::min() > a ? \
201201
T(1) :
202202
// cf or quadrature
203203
(a < T(10)) && (z - a < T(10)) ?

include/gcem_incl/incomplete_gamma_inv.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,14 +218,14 @@ noexcept
218218
any_nan(a, p) ? \
219219
GCLIM<T>::quiet_NaN() :
220220
//
221-
GCLIM<T>::epsilon() > p ? \
221+
GCLIM<T>::min() > p ? \
222222
T(0) :
223223
p > T(1) ? \
224224
GCLIM<T>::quiet_NaN() :
225-
GCLIM<T>::epsilon() > abs(T(1) - p) ? \
225+
GCLIM<T>::min() > abs(T(1) - p) ? \
226226
GCLIM<T>::infinity() :
227227
//
228-
GCLIM<T>::epsilon() > a ? \
228+
GCLIM<T>::min() > a ? \
229229
T(0) :
230230
// else
231231
incomplete_gamma_inv_begin(incomplete_gamma_inv_initial_val(a,p),a,p,lgamma(a)) );

include/gcem_incl/lgamma.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ noexcept
101101
is_nan(x) ? \
102102
GCLIM<T>::quiet_NaN() :
103103
// indistinguishable from one or <= zero
104-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
104+
GCLIM<T>::min() > abs(x - T(1)) ? \
105105
T(0) :
106-
GCLIM<T>::epsilon() > x ? \
106+
GCLIM<T>::min() > x ? \
107107
GCLIM<T>::infinity() :
108108
// else
109109
lgamma_begin(x - T(1)) );

include/gcem_incl/log.hpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ noexcept
109109
x < T(0) ? \
110110
GCLIM<T>::quiet_NaN() :
111111
// x ~= 0
112-
GCLIM<T>::epsilon() > x ? \
112+
GCLIM<T>::min() > x ? \
113113
- GCLIM<T>::infinity() :
114114
// indistinguishable from 1
115-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
115+
GCLIM<T>::min() > abs(x - T(1)) ? \
116116
T(0) :
117117
//
118118
x == GCLIM<T>::infinity() ? \
@@ -125,6 +125,21 @@ noexcept
125125
log_main(x) );
126126
}
127127

128+
template<typename T>
129+
constexpr
130+
return_t<T>
131+
log_integral_check(const T x)
132+
noexcept
133+
{
134+
return( std::is_integral<T>::value ? \
135+
x == T(0) ? \
136+
- GCLIM<return_t<T>>::infinity() :
137+
x > T(1) ? \
138+
log_check( static_cast<return_t<T>>(x) ) :
139+
static_cast<return_t<T>>(0) :
140+
log_check( static_cast<return_t<T>>(x) ) );
141+
}
142+
128143
}
129144

130145
/**
@@ -141,7 +156,7 @@ return_t<T>
141156
log(const T x)
142157
noexcept
143158
{
144-
return internal::log_check( static_cast<return_t<T>>(x) );
159+
return internal::log_integral_check( x );
145160
}
146161

147162
#endif

include/gcem_incl/log10.hpp

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,12 @@ namespace internal
3030

3131
template<typename T>
3232
constexpr
33-
T
33+
return_t<T>
3434
log10_check(const T x)
3535
noexcept
3636
{
37-
return( is_nan(x) ? \
38-
GCLIM<T>::quiet_NaN() :
39-
// x < 0
40-
x < T(0) ? \
41-
GCLIM<T>::quiet_NaN() :
42-
// x ~= 0
43-
GCLIM<T>::epsilon() > x ? \
44-
- GCLIM<T>::infinity() :
45-
// indistinguishable from 1
46-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
47-
T(0) :
48-
//
49-
x == GCLIM<T>::infinity() ? \
50-
GCLIM<T>::infinity() :
51-
// else: log_10(x) = ln(x) / ln(10)
52-
T(log(x) / GCEM_LOG_10) );
37+
// log_10(x) = ln(x) / ln(10)
38+
return return_t<T>(log(x) / GCEM_LOG_10);
5339
}
5440

5541
}
@@ -67,7 +53,7 @@ return_t<T>
6753
log10(const T x)
6854
noexcept
6955
{
70-
return internal::log10_check( static_cast<return_t<T>>(x) );
56+
return internal::log10_check( x );
7157
}
7258

7359
#endif

include/gcem_incl/log2.hpp

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,12 @@ namespace internal
3030

3131
template<typename T>
3232
constexpr
33-
T
33+
return_t<T>
3434
log2_check(const T x)
3535
noexcept
3636
{
37-
return( is_nan(x) ? \
38-
GCLIM<T>::quiet_NaN() :
39-
// x < 0
40-
x < T(0) ? \
41-
GCLIM<T>::quiet_NaN() :
42-
// x ~= 0
43-
GCLIM<T>::epsilon() > x ? \
44-
- GCLIM<T>::infinity() :
45-
// indistinguishable from 1
46-
GCLIM<T>::epsilon() > abs(x - T(1)) ? \
47-
T(0) :
48-
//
49-
x == GCLIM<T>::infinity() ? \
50-
GCLIM<T>::infinity() :
51-
// else: log_2(x) = ln(x) / ln(2)
52-
T(log(x) / GCEM_LOG_2) );
37+
// log_2(x) = ln(x) / ln(2)
38+
return return_t<T>(log(x) / GCEM_LOG_2);
5339
}
5440

5541
}
@@ -67,7 +53,7 @@ return_t<T>
6753
log2(const T x)
6854
noexcept
6955
{
70-
return internal::log2_check( static_cast<return_t<T>>(x) );
56+
return internal::log2_check( x );
7157
}
7258

7359
#endif

0 commit comments

Comments
 (0)