diff --git a/src/core/string.c b/src/core/string.c index 063525c3..6c95390f 100644 --- a/src/core/string.c +++ b/src/core/string.c @@ -164,7 +164,7 @@ static void integer_to_string_b(JanetBuffer *buffer, int32_t x) { #define HEX(i) (((uint8_t *) janet_base64)[(i)]) /* Returns a string description for a pointer. Truncates - * title to 12 characters */ + * title to 32 characters */ static int32_t string_description_impl(uint8_t *buf, const char *title, void *pointer) { uint8_t *c = buf; int32_t i; @@ -607,7 +607,7 @@ JanetBuffer *janet_pretty(JanetBuffer *buffer, int depth, Janet x) { } /* Helper function for formatting strings. Useful for generating error messages and the like. - * Similiar to printf, but specialized for operating with janet. */ + * Similar to printf, but specialized for operating with janet. */ const uint8_t *janet_formatc(const char *format, ...) { va_list args; int32_t len = 0; @@ -1246,7 +1246,7 @@ static const JanetReg cfuns[] = { }, {"string/replace", cfun_replace, "(string/replace patt subst str)\n\n" - "Replace the first occurrence of patt with subst in the the string str. " + "Replace the first occurrence of patt with subst in the string str. " "Will return the new string if patt is found, otherwise returns str." }, {"string/replace-all", cfun_replaceall, @@ -1287,7 +1287,7 @@ static const JanetReg cfuns[] = { }, {"string/pretty", cfun_pretty, "(string/pretty x [,depth=4 [,buffer=@\"\"]])\n\n" - "Pretty prints a value to a buffer. Optionally allwos setting max " + "Pretty prints a value to a buffer. Optionally allows setting max " "recursion depth, as well as writing to a buffer. Returns the buffer." }, {NULL, NULL, NULL} diff --git a/src/core/strtod.c b/src/core/strtod.c index 2f2a4f83..f3aa13bc 100644 --- a/src/core/strtod.c +++ b/src/core/strtod.c @@ -104,7 +104,8 @@ static void bignat_append(struct BigNat *mant, uint32_t dig) { } /* Multiply the mantissa mant by a factor and the add a term - * in one operation. Both factor and term will be between 2 and 36. */ + * in one operation. factor will be between 2 and 36^4, + * term will be between 0 and 36. */ static void bignat_muladd(struct BigNat *mant, uint32_t factor, uint32_t term) { int32_t i; uint64_t carry = ((uint64_t) mant->first_digit) * factor + term; @@ -215,10 +216,9 @@ static double convert( * Get exponent to zero while holding X constant. */ /* Positive exponents are simple */ - while (exponent > 0) { - bignat_muladd(mant, base, 0); - exponent--; - } + for (;exponent > 3; exponent -= 4) bignat_muladd(mant, base * base * base * base, 0); + for (;exponent > 1; exponent -= 2) bignat_muladd(mant, base * base, 0); + for (;exponent > 0; exponent -= 1) bignat_muladd(mant, base, 0); /* Negative exponents are tricky - we don't want to loose bits * from integer division, so we need to premultiply. */ @@ -226,10 +226,9 @@ static double convert( int32_t shamt = 5 - exponent / 4; bignat_lshift_n(mant, shamt); exponent2 -= shamt * BIGNAT_NBIT; - while (exponent < 0) { - bignat_div(mant, base); - exponent++; - } + for (;exponent < -3; exponent += 4) bignat_div(mant, base * base * base * base); + for (;exponent < -2; exponent += 2) bignat_div(mant, base * base); + for (;exponent < 0; exponent += 1) bignat_div(mant, base); } return negative