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);