Torbjorn Granlund wrote: > For general seq use, I suppose we should do away with `incr' and instead > use a general `add'. Below is a suggested implementation, and as bonus > also a `sub'. > > Like `incr', `add' needs an extra byte if space, since if the end value > is within the increment from a power of 10, a number with one more digit > than the end value will be created. > > Implementing negative values is a bit tricky. If a-b is wanted and a < > b, one must of course compute b-a and separately store a minus sign. I > just write a `sub' function, not any code actually handling negative > numbers. > > The function `add' is reasonably well-tested. The function `sub' is > minimally tested (but as a trivial edit of `add' it might b correct > anyway).
Thanks. I'm sure someone will find time to experiment with those. Looking at factor.c, I saw this bit of code, and confirm that the current tests do not exercise it. { /* The found factor is two words. This is highly unlikely, thus hard to trigger. Please be careful before you change this code! */ uintmax_t ginv; binv (ginv, g0); /* Compute n = n / g. Since the result will */ n0 = ginv * n0; /* fit one word, we can compute the quotient */ n1 = 0; /* modulo B, ignoring the high divisor word. */ if (!prime2_p (g1, g0)) factor_using_pollard_rho2 (g1, g0, a + 1, factors); else factor_insert_large (factors, g1, g0); } Can you provide a test case that exercises that code?