Taylor R Campbell [Fri, 7 Dec 2018 04:16:41 +0000 (04:16 +0000)]
Make flo:nan.0 reliably return a `positive' quiet NaN with payload 0.
Taylor R Campbell [Fri, 7 Dec 2018 04:12:03 +0000 (04:12 +0000)]
Fix bug in flo:make-nan error reporting.
error_bad_range_arg takes argument number, not argument value.
Taylor R Campbell [Fri, 7 Dec 2018 04:11:01 +0000 (04:11 +0000)]
flo:make-nan error reporting is busted.
Taylor R Campbell [Fri, 7 Dec 2018 03:55:05 +0000 (03:55 +0000)]
Confirm #i works with inf and nan.
Taylor R Campbell [Fri, 7 Dec 2018 03:54:00 +0000 (03:54 +0000)]
There is no exact infinity or NaN, so #e should reject them.
But we produce them anyway.
Taylor R Campbell [Wed, 5 Dec 2018 05:56:55 +0000 (05:56 +0000)]
x86 push can take a memory reference operand.
Conveniently, it evaluates rsp before modifying it too.
Shaves about 1% off the runtime.
Taylor R Campbell [Wed, 5 Dec 2018 05:58:07 +0000 (05:58 +0000)]
Print newline in debugging-printer primitive.
Taylor R Campbell [Tue, 4 Dec 2018 06:15:17 +0000 (06:15 +0000)]
Disable allocator open coders.
These don't actually do anything useful. What they do is open-code a
type check -- and then branch to the same primitive call whether the
type check passed or failed. So they serve only to expand the code.
This appears to have been an aborted experiment in the HP PA-RISC back
end from 1993.
Taylor R Campbell [Mon, 3 Dec 2018 09:19:01 +0000 (09:19 +0000)]
Add missing type checks to some bit string operations.
Taylor R Campbell [Mon, 3 Dec 2018 09:18:13 +0000 (09:18 +0000)]
Bit string primitives are missing type checks.
Taylor R Campbell [Sun, 2 Dec 2018 03:32:42 +0000 (03:32 +0000)]
Teach pp to respect custom print methods for tagged vectors.
Taylor R Campbell [Sun, 2 Dec 2018 03:29:16 +0000 (03:29 +0000)]
pp doesn't respect custom print methods for tagged vectors.
Taylor R Campbell [Sun, 2 Dec 2018 02:45:35 +0000 (02:45 +0000)]
Rework vector tag printer methods so they work again.
XXX Needs tests, but these are a pain to construct...
Taylor R Campbell [Sun, 2 Dec 2018 02:08:58 +0000 (02:08 +0000)]
pp _is_ busted after all but it takes a hairier example.
Taylor R Campbell [Sun, 2 Dec 2018 02:00:17 +0000 (02:00 +0000)]
pp is not busted; I just didn't know about pp-avoid-circularity.
TIL.
Taylor R Campbell [Sun, 2 Dec 2018 01:56:52 +0000 (01:56 +0000)]
Make pp's job easier in this test. (Still busted.)
Taylor R Campbell [Sun, 2 Dec 2018 01:55:45 +0000 (01:55 +0000)]
Fix find-shared-objects. pp is still busted.
Taylor R Campbell [Sun, 2 Dec 2018 01:53:02 +0000 (01:53 +0000)]
find-shared-objects is busted for multiple references.
Taylor R Campbell [Sun, 2 Dec 2018 01:35:04 +0000 (01:35 +0000)]
pp is busted on circular data structures.
Taylor R Campbell [Sun, 2 Dec 2018 01:34:41 +0000 (01:34 +0000)]
Allow the full form of FLUID-LET with ACCESS.
Taylor R Campbell [Sun, 2 Dec 2018 01:33:44 +0000 (01:33 +0000)]
FLUID-LET of ACCESS broke.
(Yes, I know it's legacy, but I need it for another test at the
moment.)
Taylor R Campbell [Sun, 2 Dec 2018 01:00:20 +0000 (01:00 +0000)]
Tickled a bug in connectivity analysis with arity error.
Taylor R Campbell [Sun, 2 Dec 2018 00:14:53 +0000 (00:14 +0000)]
Compiler chokes on a variable named |#[continuation]|.
Taylor R Campbell [Sat, 1 Dec 2018 23:04:19 +0000 (23:04 +0000)]
Open-code some flonum predicates on amd64.
- flonum-is-equal?
- flonum-is-finite?
- flonum-is-infinite?
- flonum-is-nan?
- flonum-is-normal?
- flonum-is-zero?
Taylor R Campbell [Sat, 1 Dec 2018 22:50:22 +0000 (22:50 +0000)]
Teach sf about flo:safe-zero? and flo:safe=.
Taylor R Campbell [Sat, 1 Dec 2018 22:50:07 +0000 (22:50 +0000)]
Speed this up a little at the expense of coverage.
Taylor R Campbell [Sat, 1 Dec 2018 22:49:17 +0000 (22:49 +0000)]
Add some more spot checks. Zero is not exact here, for sign.
Taylor R Campbell [Sat, 1 Dec 2018 22:44:17 +0000 (22:44 +0000)]
Test some more edge cases and exception flags.
Taylor R Campbell [Sat, 1 Dec 2018 22:41:56 +0000 (22:41 +0000)]
Teach Scheme about the floating-point subnormal-operand exception.
Taylor R Campbell [Sat, 1 Dec 2018 22:39:12 +0000 (22:39 +0000)]
Make flo:clear-exceptions! register interest in fp env.
Not sure why I made it conditional before. Makes sense for
flo:raise-exceptions! for functions whose callers might or might not
want them, but usually you do flo:clear-exceptions! only if you are
actually going to use them afterward.
Taylor R Campbell [Sat, 1 Dec 2018 22:34:55 +0000 (22:34 +0000)]
Earlier change to flo:clear-exceptions! is busted.
In particular, the pattern
(flo:preserving-environment
(lambda ()
(flo:clear-exceptions! (flo:supported-exceptions))
...))
ought to give you an environment where the exceptions are cleared,
but it doesn't.
Taylor R Campbell [Sat, 1 Dec 2018 15:32:48 +0000 (15:32 +0000)]
Teach the compiler about more boolean and function primitives.
Taylor R Campbell [Sat, 1 Dec 2018 15:16:49 +0000 (15:16 +0000)]
Recursively integrate after substitution.
The declarations in this context may have changed. This way, you can
get a lot of straight-line floating-point arithmetic like so:
(define (flo:sinh-taylor19 x)
(declare (no-type-checks))
(let* ((x^2 (flo:* x x))
(t8 (flo:/ 1.
121645100408832000.))
(t7 (flo:+ (flo:/ 1.
355687428096000.) (flo:* x^2 t8)))
(t6 (flo:+ (flo:/ 1.
1307674368000.) (flo:* x^2 t7)))
(t5 (flo:+ (flo:/ 1.
6227020800.) (flo:* x^2 t6)))
(t4 (flo:+ (flo:/ 1.
39916800.) (flo:* x^2 t5)))
(t3 (flo:+ (flo:/ 1. 362880.) (flo:* x^2 t4)))
(t2 (flo:+ (flo:/ 1. 5040.) (flo:* x^2 t3)))
(t1 (flo:+ (flo:/ 1. 120.) (flo:* x^2 t2)))
(t0 (flo:+ (flo:/ 1. 6.) (flo:* x^2 t1))))
(declare (integrate t0 t1 t2 t3 t4 t5 t6 t7 t8 x^2))
(flo:* x (flo:+ 1. (flo:* x^2 t0)))))
Previously, the number of variables in this sequence that would be
integrated depended on the number of surrounding integrated calls in
the body of the let (!).
Taylor R Campbell [Sat, 1 Dec 2018 14:53:19 +0000 (14:53 +0000)]
Restore parallel compilation of compiler.
Taylor R Campbell [Sat, 1 Dec 2018 14:34:07 +0000 (14:34 +0000)]
Fix thinko.
Taylor R Campbell [Sat, 1 Dec 2018 02:09:21 +0000 (02:09 +0000)]
Use real:abs, real:copysign.
These aren't guaranteed to be flonums here.
Mixed-exactness complex numbers are pretty silly.
Taylor R Campbell [Sat, 1 Dec 2018 02:07:03 +0000 (02:07 +0000)]
Sqrt is busted on sone mixed-infinite/exact cases.
Taylor R Campbell [Sat, 1 Dec 2018 02:05:40 +0000 (02:05 +0000)]
Make ieee754-binary-hex-string follow IEEE 754-2008.
Taylor R Campbell [Fri, 30 Nov 2018 18:31:20 +0000 (18:31 +0000)]
New procedure (flo:logb x) gives the integer exponent of x.
Taylor R Campbell [Fri, 30 Nov 2018 18:06:44 +0000 (18:06 +0000)]
Implement and fix fenceposts in inf and NaN encoding.
Taylor R Campbell [Fri, 30 Nov 2018 17:42:26 +0000 (17:42 +0000)]
Use ieee754-binary-parameters to reduce magic constants.
Taylor R Campbell [Fri, 30 Nov 2018 17:42:04 +0000 (17:42 +0000)]
Fix broken hexadecimal floating-point printing.
Taylor R Campbell [Fri, 30 Nov 2018 16:24:12 +0000 (16:24 +0000)]
What was I thinking. This is all wrong if the top bit is not 1.
Taylor R Campbell [Fri, 30 Nov 2018 08:50:19 +0000 (08:50 +0000)]
Note copysign procedure.
Taylor R Campbell [Fri, 30 Nov 2018 08:47:59 +0000 (08:47 +0000)]
Remove bogus note about flo:compare and flo:safe-compare.
Never actually committed these; decided a four-way comparison wasn't
worth it without a motivating application. Won't work for anything
that expects a three-way -1/0/+1 compare.
Taylor R Campbell [Fri, 30 Nov 2018 00:43:36 +0000 (00:43 +0000)]
Open-code flo:copysign on amd64.
Taylor R Campbell [Fri, 30 Nov 2018 08:22:27 +0000 (08:22 +0000)]
Add a copysign test case that bit me in a state I can't reproduce.
Taylor R Campbell [Fri, 30 Nov 2018 07:59:04 +0000 (07:59 +0000)]
Don't futz with floenv if not in use.
Makes flo:raise-exceptions! kosher to use anywhere without incurring
cost in threads that don't care.
Taylor R Campbell [Fri, 30 Nov 2018 07:46:42 +0000 (07:46 +0000)]
Clear exceptions so residual crud doesn't trap.
Taylor R Campbell [Fri, 30 Nov 2018 07:26:07 +0000 (07:26 +0000)]
Tidy up some negative tests. No functional change intended.
Taylor R Campbell [Fri, 30 Nov 2018 07:19:49 +0000 (07:19 +0000)]
Rename flo:safe-negative? -> flo:sign-negative?.
It was confusing that (flo:safe< x 0.) was not the same as
(flo:safe-negative? x) -- they disagree on -0 and NaN values with
negative sign bits.
Taylor R Campbell [Fri, 30 Nov 2018 07:11:27 +0000 (07:11 +0000)]
Fix some things that I was mistakenly testing with an old compiler.
sqrt should not trap on qNaN, which requires some care with
comparisons. Further, since sqrt(-0) is supposed to be -0, we can't
just use flo:safe-negative? (which returns true for -0.); we must
instead use (flo:safe< x 0.) (which returns false for -0.).
Taylor R Campbell [Fri, 30 Nov 2018 06:48:05 +0000 (06:48 +0000)]
Define and expose flo:precision.
This is the same as flo:significand-digits-base-2, but its name
doesn't imply base 2 -- it refers to whatever the floating-point
radix is. Not that we're likely to do decimal floating-point ever,
but maybe you might want to write code that could be used in another
environment that does.
Taylor R Campbell [Fri, 30 Nov 2018 06:45:46 +0000 (06:45 +0000)]
Simplify and test some more exception cases.
Taylor R Campbell [Fri, 30 Nov 2018 06:37:51 +0000 (06:37 +0000)]
Test NaN preservation of sqrt.
Taylor R Campbell [Fri, 30 Nov 2018 06:29:58 +0000 (06:29 +0000)]
Handle more sqrt edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 05:51:26 +0000 (05:51 +0000)]
Enable traps here to confirm they don't happen.
Taylor R Campbell [Fri, 30 Nov 2018 05:49:03 +0000 (05:49 +0000)]
Raise the appropriate exceptions in exact->exact.
- inexact-result if result is changed by rounding
- overflow if result is infinite.
Taylor R Campbell [Fri, 30 Nov 2018 05:45:06 +0000 (05:45 +0000)]
Test exceptions in exact->inexact.
Taylor R Campbell [Fri, 30 Nov 2018 05:11:35 +0000 (05:11 +0000)]
Teach exact->inexact to return infinity rather than crash.
Taylor R Campbell [Fri, 30 Nov 2018 04:43:02 +0000 (04:43 +0000)]
Test exact->inexact near integer edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 04:39:18 +0000 (04:39 +0000)]
Use exact-integer-sqrt in sqrt for exact integers and rationals.
Taylor R Campbell [Fri, 30 Nov 2018 04:30:29 +0000 (04:30 +0000)]
Deduplicate test cases.
Taylor R Campbell [Fri, 30 Nov 2018 04:29:55 +0000 (04:29 +0000)]
Fix sqrt along negative real axis with inexact zero imaginary part.
Taylor R Campbell [Fri, 30 Nov 2018 04:24:20 +0000 (04:24 +0000)]
Sqrt shouldn't discard an inexact zero imaginary component.
Taylor R Campbell [Fri, 30 Nov 2018 04:13:51 +0000 (04:13 +0000)]
Test sqrt along the negative real line with/without inexact imaginary part.
Taylor R Campbell [Fri, 30 Nov 2018 03:21:44 +0000 (03:21 +0000)]
Test (sqrt -0.) = -0., per IEEE 754-2008.
Taylor R Campbell [Fri, 30 Nov 2018 03:11:48 +0000 (03:11 +0000)]
More sqrt edge cases, some working and some busted.
Taylor R Campbell [Fri, 30 Nov 2018 03:04:11 +0000 (03:04 +0000)]
Couple more sqrt edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 03:01:32 +0000 (03:01 +0000)]
For +/-2i x, compute sqrt by sqrt(x) +/- i sqrt(x).
Strike off some expected failures.
Taylor R Campbell [Fri, 30 Nov 2018 02:27:07 +0000 (02:27 +0000)]
Fix branch cuts of some test cases -- no more xfail!
Taylor R Campbell [Fri, 30 Nov 2018 01:56:12 +0000 (01:56 +0000)]
Annotate where these tests rely on type and range checks.
Taylor R Campbell [Fri, 30 Nov 2018 01:54:51 +0000 (01:54 +0000)]
Define (copysign m s) = magnitude of m, sign of s.
Taylor R Campbell [Fri, 30 Nov 2018 01:26:31 +0000 (01:26 +0000)]
Add some more edge cases for sqrt.
Taylor R Campbell [Fri, 30 Nov 2018 01:03:30 +0000 (01:03 +0000)]
Test exceptions in sqrt too.
Taylor R Campbell [Fri, 30 Nov 2018 00:53:48 +0000 (00:53 +0000)]
Test flo:negate.
Taylor R Campbell [Fri, 30 Nov 2018 00:53:05 +0000 (00:53 +0000)]
Add some more sqrt edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 00:47:15 +0000 (00:47 +0000)]
Fix mistranscription of opcode for UNPCKLF.
Taylor R Campbell [Thu, 29 Nov 2018 05:30:04 +0000 (05:30 +0000)]
Add some more copysign tests.
Taylor R Campbell [Thu, 29 Nov 2018 03:05:53 +0000 (03:05 +0000)]
Floating-point total ordering.
- (flo:total< x y) is true if x < y in the total ordering on
floating-point values defined in IEEE 754-2008 Sec. 5.10, i.e. this
is the totalOrder function of IEEE 754-2008 Sec. 5.7.2.
- (flo:total-order x y) is -1 if x < y, 0 if x = y, +1 if x > y in the
total ordering -- the three-way comparison version of total<.
- (flo:total-mag< x y) = (flo:total< (flo:abs x) (flo:abs y))
- (flo:total-order-mag x y)
= (flo:total-order (flo:abs x) (flo:abs y))
While here, tweak release notes on flonum stuff.
Taylor R Campbell [Thu, 29 Nov 2018 02:57:09 +0000 (02:57 +0000)]
sqrt is busted on infinities.
Taylor R Campbell [Thu, 29 Nov 2018 02:54:45 +0000 (02:54 +0000)]
Move a bunch of flonum tests to test-flonum.scm.
Let's keep test-arith.scm for higher-level numerical computations.
Taylor R Campbell [Thu, 29 Nov 2018 02:43:50 +0000 (02:43 +0000)]
Make the signature of define-enumerated-test match everyone else.
Not sure why I used vectors here in the first place.
Taylor R Campbell [Thu, 29 Nov 2018 02:12:01 +0000 (02:12 +0000)]
Note string and symbol escape printing bug.
Taylor R Campbell [Thu, 29 Nov 2018 02:11:51 +0000 (02:11 +0000)]
Note local optional parameter bug.
Taylor R Campbell [Thu, 29 Nov 2018 02:11:40 +0000 (02:11 +0000)]
Note magnitude overflow bug.
Taylor R Campbell [Thu, 29 Nov 2018 02:11:21 +0000 (02:11 +0000)]
Note flo:min/max IEEE 754-2008 conformance.
Taylor R Campbell [Thu, 29 Nov 2018 02:10:41 +0000 (02:10 +0000)]
Test more edge cases of rounding operations.
Include the rounding->exact operations too.
Taylor R Campbell [Thu, 29 Nov 2018 02:09:57 +0000 (02:09 +0000)]
Update some release notes on floating-point stuff.
Taylor R Campbell [Thu, 29 Nov 2018 02:05:51 +0000 (02:05 +0000)]
Use fabs(3) for C implementation of FLONUM-ABS.
A conditional based on < doesn't handle NaN correctly.
Taylor R Campbell [Thu, 29 Nov 2018 02:02:22 +0000 (02:02 +0000)]
Our C implementation of flo:abs is busted.
Taylor R Campbell [Thu, 29 Nov 2018 01:59:16 +0000 (01:59 +0000)]
Pass multiple arguments here. No functional change.
Taylor R Campbell [Wed, 28 Nov 2018 19:24:36 +0000 (19:24 +0000)]
New NaN-related and min/max flonum procedures and fixes.
- (flo:qnan) returns a quiet NaN: arithmetic on it quietly returns
another qNaN (usually the same one, unless there are multiple to
choose from) without raising any exception.
- (flo:snan) returns a signalling NaN: arithmetic on it returns
another sNaN (usually the same) and raises an exception, which will
trap if you ask.
- (flo:qnan? f) = (and (flo:nan? f) (flo:nan-quiet? f))
- (flo:snan? f) = (and (flo:nan? f) (not (flo:nan-quiet? f)))
- (flo:min x y) and (flo:max x y) now raise an exception only if at
least one input is a signalling NaN, and traps only if you ask.
These now implement minNum and maxNum of IEEE 754-2008.
- (flo:min-mag x y) and (flo:max-mag x y) return whichever of the
inputs has the smaller magnitude, as in minNumMag and maxNumMag in
IEEE 754-2008.
Taylor R Campbell [Wed, 28 Nov 2018 17:55:03 +0000 (17:55 +0000)]
New primitives for creating and examining NaNs.
- (flo:make-nan negative? quiet? payload)
- (flo:nan-quiet? nan)
- (flo:nan-payload nan)
Taylor R Campbell [Wed, 28 Nov 2018 17:53:31 +0000 (17:53 +0000)]
New CTASSERT macro for compile-time assertions.
Taylor R Campbell [Wed, 28 Nov 2018 17:07:36 +0000 (17:07 +0000)]
Implement flo:safe-zero? and flo:safe=.
Taylor R Campbell [Wed, 28 Nov 2018 16:55:06 +0000 (16:55 +0000)]
Merge these cases again now that the xfails are fixed.
Chris Hanson [Tue, 27 Nov 2018 07:18:35 +0000 (23:18 -0800)]
Implement binary-hash-by-X; some hair to guarantee fixnum result.
Not nearly as fast as the underlying unary hash, but for now that's OK. If need
be we can make it faster.
Chris Hanson [Mon, 26 Nov 2018 07:16:50 +0000 (23:16 -0800)]
Simplify spar-push-body.
Chris Hanson [Mon, 26 Nov 2018 01:09:37 +0000 (17:09 -0800)]
Eliminate unnecessary copy of map-in-order.