On 12/17/2012 04:06 AM, Pierpaolo Bernardi wrote:
Some comments after scanning the manual.
====
flulp-error
"For non-rational arguments such as +nan.0, flulp-error returns 0.0 if
(eqv? x r); otherwise it returns +inf.0."
However one example is:
(flulp-error +inf.0 +nan.0)
+nan.0
Which does not agree with the doc.
Whoops! I'll fix this one.
"2.3.2 Flonum Constants
-max.0 : Flonum
-min.0 : Flonum
+min.0 : Flonum
+max.0 : Flonum
The rational flonums with maximum and minimum magnitude.
Example:
(list -max.0 -min.0 +min.0 +max.0)
'(-1.7976931348623157e+308
-4.9406564584125e-324
4.9406564584125e-324
1.7976931348623157e+308)"
The minimum magnitude rational flonums are 0.0 and -0.0. Perhaps
"minimum non-zero magnitude"?
Yes. Or "The nonzero, rational flonums with maximum and minimum
magnitude." I'll fix it.
gamma-inc
"The following identities should hold:
• (gamma-inc k x) = 0"
I'm no expert, but this identity smells 8^)
Looks like another case of eyes just sliding over an obvious mistake
because the brain thinks it already knows what's there. It should be
(gamma-inc k 0) = 0. I'll fix it.
multinomial
"(multinomial n ks) → Natural
n : Integer
ks : (Listof Integer)
...
(multinomial 5 3 2)
10"
The example does not agree with the spec.
I didn't update the docs after changing all the multinomial function
argument types. I'll fix this.
Unless I missed it, there's no evaluator of polynomials? seems a
useful and common operation, and surely there must be one or more
implementations somewhere in the internals of the lib?
There are, for Chebyshev polynomials. When I considered making
`math/polynomial', I discovered that I needed at least two kinds:
Chebyshev basis and power basis (e.g. a + bx + cx^2 + ...). Not only
that, but I needed functions for flonum, real, complex, and bigfloat
polynomials, for both kinds.
I'd like to provide a general type for polynomials with any orthogonal
basis, parameterized on type, with polymorphic operations that dispatch
to flonum/real/complex/bigfloat implementations. (And more. For example,
it's sensible to use polynomials as coefficients. Using n-dimensional
monomial coefficients gives you supersparse n-dimensional polynomials.)
That'll require support for generics in Typed Racket, which doesn't exist.
At very least, if `math/polynomial' doesn't have all that nifty
parameterization, I'd like it to be designed to not break user programs
when we upgrade it.
It's a lot of work either way, so I decided to hold back for Math v1.0.
The prefix for bigfloat operations sometimes is "bigfloat-", sometimes
"bf-", sometimes "bf", with no evident (to me) pattern.
Those that have "bigfloat" in the name are struct accessors, the
bigfloat predicate, and conversion functions.
Values with the "bf-" prefix don't operate on bigfloats: they're
parameters or constants.
The docs should explain this. Might be enough to group them better. Will
fix.
My two neurons protest vehemently.
Classic!
Unless I missed it, there's no discussion of the result precision of
mixed precision bf operations. Maybe it should be mentioned?
The docs for `bf-precision' cover it:
A parameter that determines the precision of new bigfloat values.
With a few noted exceptions, bigfloat functions conceptually compute in
infinite precision, round the answers to (bf-precision) bits using
(bf-rounding-mode), and return the rounded answers. (In practice, they
employ finite algorithms that have been painstakingly proved to be
equivalent to the aforementioned infinite process.)
**
It's been bugging me that this isn't discussed earlier in the docs. I'll
try to do something about it. Advice welcome.
bflog2, bflog10, bfexp2, bfexp10
Unless I have missed them, there are no fl and generic equivalent of these.
These are commonly used functions. Maybe should be provided?
I'm not sure why MPFR provides these. (bfexp2 x) is equivalent to
(bfexpt (bf 2) x), and similarly for `bfexp10'. If they had `bflogb'
(log with base), the former two would be similarly redundant.
I'm planning `fllogb' instead of `fllog2' and `fllog10'. Just haven't
gotten around to it.
bfagm
Wins the prize for the most fortranesque name.
Woo! Do I get a toaster? Luggage? An all-expenses-paid vacation to
Wisconsin?
why math/arrays and not data/arrays ?
Good question.
diagonal-array
"returns a square array..."
hmmm... is 'square' appropriate for more than 2-dimensional arrays?
Nope. Will fix.
Great work!
Thanks, and thanks for the feedback!
Neil ⊥
____________________
Racket Users list:
http://lists.racket-lang.org/users