Skip to content

Commit 4ecd264

Browse files
use mul64_overflow
1 parent c3354f7 commit 4ecd264

2 files changed

Lines changed: 4 additions & 6 deletions

File tree

src/integer64.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,10 +366,10 @@ SEXP power_integer64_integer64(SEXP e1_, SEXP e2_, SEXP ret_){
366366
long long * e1 = (long long *) REAL(e1_);
367367
long long * e2 = (long long *) REAL(e2_);
368368
long long * ret = (long long *) REAL(ret_);
369-
long long base, exp, intermediate;
369+
long long base, exp;
370370
Rboolean naflag = FALSE;
371371
mod_iterate(n1, n2, i1, i2) {
372-
POW64(e1[i1],e2[i2],ret[i],naflag,base,exp,intermediate)
372+
POW64(e1[i1],e2[i2],ret[i],naflag,base,exp)
373373
}
374374
if (naflag)warning(INTEGER64_OVERFLOW_WARNING);
375375
return ret_;

src/integer64.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ static inline bool mul64_overflow(long long a, long long b, long long *res) {
154154
ret = llroundl(longret); \
155155
}
156156

157-
#define POW64(e1,e2,ret,naflag,base,exp,intermediate) \
157+
#define POW64(e1,e2,ret,naflag,base,exp) \
158158
if (e1 == NA_INTEGER64 || e2 == NA_INTEGER64) \
159159
ret = NA_INTEGER64; \
160160
else { \
@@ -164,9 +164,7 @@ static inline bool mul64_overflow(long long a, long long b, long long *res) {
164164
exp = e2; \
165165
while (exp > 0) { \
166166
if (exp % 2 == 1) { \
167-
intermediate = ret; \
168-
ret *= base; \
169-
if (!GOODIPROD64(intermediate, base, ret)) { \
167+
if (mul64_overflow(ret, base, &ret)) { \
170168
ret = NA_INTEGER64; \
171169
naflag = TRUE; \
172170
break; \

0 commit comments

Comments
 (0)