The
problem is that the exponents are far too large to handle adaptive
parameters. The exponents are allowed to be as large as 50, but even
with exponents on the order of 20 (depending on the other values used)
the values produced are larger than 10^17, which is about as big as you
can use for an additive adaptive parameter.
The reason is that the doubleprecision real numbers typically used by
perl only hold about 17 digits of precision, so for numbers larger than
10^17 or so, addition of 1 will not make any difference in the result.
The adaptive parameters use changes on the order of 1 to adapt the
parameters, and what happens is that these changes are below the
precision of the numbers involved, and so the changes end up being
zero, and the resulting matrix is singular. So no adaptive parameters
can be found.
It may be possible to adjust the changes used so that they are in
relation to the size of the values actually involved rather than hard
coded as 1, but I haven't really investigated the method involved
carefully. (When writing the Parserbased version of this, I simply
copied the process from the original WeBWorK code.) It should be able
to be improved, though.
This is also the issue for bugs #1079 and #1082.
Davide
< Post or View Comments >
