diff --git a/pdf.c b/pdf.c index 55df706a3b3b878a35eef5d05de58814c9c9b7ff..0101ca29f9b291931a426edf8ef4c562e12d3287 100644 --- a/pdf.c +++ b/pdf.c @@ -255,8 +255,6 @@ act_a85zero(const HParseResult *p, void *u) return H_MAKE_UINT(b); } -#include <math.h> /* pow() */ - HParsedToken * act_a85digit(const HParseResult *p, void *u) { @@ -279,11 +277,11 @@ act_a85fivedigits(const HParseResult *p, void *u) /* Only for groups that do not need to padded to 5 */ assert(seq->used == 5); - fourbytes += H_CAST_UINT(digits[0]) * ((uint64_t) pow(85,4)); - fourbytes += H_CAST_UINT(digits[1]) * ((uint64_t) pow(85,3)); - fourbytes += H_CAST_UINT(digits[2]) * ((uint64_t) pow(85,2)); - fourbytes += H_CAST_UINT(digits[3]) * ((uint64_t) pow(85,1)); - fourbytes += H_CAST_UINT(digits[4]); + fourbytes = H_CAST_UINT(digits[0]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[1]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[2]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[3]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[4]); assert(fourbytes <= A85GRPMAX); return H_MAKE_UINT(fourbytes); @@ -322,8 +320,9 @@ act_a85partial2group(const HParseResult *p, void *u) HParsedToken **digits = h_seq_elements(p->ast); assert(seq->used == 2); - fourbytes += H_CAST_UINT(digits[0]) * ((uint64_t) pow(85,4)); - fourbytes += H_CAST_UINT(digits[1]) * ((uint64_t) pow(85,3)); + fourbytes = H_CAST_UINT(digits[0]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[1]); + fourbytes *= 85 * 85 * 85; assert(fourbytes <= A85GRPMAX); return H_MAKE_UINT(fourbytes); @@ -343,9 +342,10 @@ act_a85partial3group(const HParseResult *p, void *u) HParsedToken **digits = h_seq_elements(p->ast); assert(seq->used == 3); - fourbytes += H_CAST_UINT(digits[0]) * ((uint64_t) pow(85,4)); - fourbytes += H_CAST_UINT(digits[1]) * ((uint64_t) pow(85,3)); - fourbytes += H_CAST_UINT(digits[2]) * ((uint64_t) pow(85,2)); + fourbytes = H_CAST_UINT(digits[0]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[1]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[2]); + fourbytes *= 85 * 85; assert(fourbytes <= A85GRPMAX); return H_MAKE_UINT(fourbytes); @@ -365,10 +365,11 @@ act_a85partial4group(const HParseResult *p, void *u) HParsedToken **digits = h_seq_elements(p->ast); assert(seq->used == 4); - fourbytes += H_CAST_UINT(digits[0]) * ((uint64_t) pow(85,4)); - fourbytes += H_CAST_UINT(digits[1]) * ((uint64_t) pow(85,3)); - fourbytes += H_CAST_UINT(digits[2]) * ((uint64_t) pow(85,2)); - fourbytes += H_CAST_UINT(digits[3]) * ((uint64_t) pow(85,1)); + fourbytes = H_CAST_UINT(digits[0]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[1]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[2]); + fourbytes = fourbytes * 85 + H_CAST_UINT(digits[3]); + fourbytes *= 85; assert(fourbytes <= A85GRPMAX); return H_MAKE_UINT(fourbytes);