Marshal,
You move a complex number too far to get the nearest (Gaussian) integer.
Should be (+&0.25j0.25)
That is
round =: <. @: (+&0.25j0.25)
will round a complex (and real and pure imaginary) number to the "closest"
integer.
(Note your typo --- should be + not - for nearest integer)
FWIW I support the (very well done) implementation of <. and | and #.
The point is that going from 1D to 2D (or Real to Complex) often the obvious
way is not the appropriate way. You need to look at the higher dimension and
check that going down to a lower dimension still makes sense. In the complex
domain you need to treat the complex number as an entity, rather than 2
elements.
However in this case we can say "Don't adjust your TV, the problem is with
reality", well with the usual defn of modulo arithmetic on the integers.
As pointed out before to do arithmetic (mod N) you just need N equivalence
classes and rules for addition (and subtraction and by extension
multiplication) using these equivalence classes. These classes are labelled 0,
1, 2, ... (N-1) by convention. This is convention is so ingrained that there
is little chance of changing it. However note that lots of J programs would
run correctly if the equivalence classes were mapped to (0, 1, 2, ...
(<.-:<:N), (<.--:N), ... _1 ) because of J negative indexing etc. The addition,
subtraction, multiplication of the equivalent classes using the mathematical
rules for the integers with the same labels are going to be correct.
It is only with the final use of the numbers when the equivalence classes are
mapped to the integers that you may come unstuck. However note that at present
if you do modulo 12 arithmetic (as a model of hours on a clock face) you run
into problems coming back to the integers because the labels don't match! You
need to map the equivalent classes labelled (0, 1, 2,... 11) onto hours
labelled (12, 1, 2, ... 11). This is in effect similar to mapping (0, 1, 2, 3,
4, 5, _6, _5, _4, _3, _2, _1) onto (0, 1, ... 11)
Note: There is not any mathematical LAW about labelling these equivalence
classes, any more that there is a LAW of mathematics that says you need to do
multiplications before additions!
My only beef is that the dictionary doesn't have better documentation of <. and
| for complex numbers. Perhaps something for the community to do!
Ian
Ian Shannon
Landscape Modelling & Decision Support
Scientific Services
Office of Environment and Heritage
Department of Premier and Cabinet
PO Box A290
Sydney South
NSW 1232
T: +61 2 99 955 490
E =: {~&:>`(i.&.:>)/
E'.@aeghimnorstuvw';'0123456789abcdef';'6280b528898138e6a98738c08bf049e02d'
NB. Nub_of_email index_alphabet index_into_sorted_nub_of_email
Date: Sun, 22 Jan 2012 13:26:20 -0500
From: Marshall Lochbaum <[email protected]>
Subject: Re: [Jprogramming] 5|0 1 2 3 4 is not equal to 5|0 1 2 3 4
j.0
To: Programming forum <[email protected]>
Well, if we can agree that (-<.) -: 1&| , then these rules are already
proving inconsistent.
1 | 0.6j0.6
_0.4j_0.4
(-<.) 0.6j0.6
_0.4j0.6
Here is the model I'm currently aiming for:
1&| for reals is defined as the function which shifts by an integer such
that (0<:1&|) and (1>1&|)
1&| -: 1&|&.+.
b&| -: 1&|&.(%&b)
<. -: (- 1&|)
($0)&#: -: ($0)"_
(bs,b)&#: -: ((bs #: <.@%&b),b&|) NB. bs a list, b a scalar
These definitions are consistent with current definitions for real numbers
and provide a very natural extension to complex numbers. Furthermore they
have the desirable property that <.@:(-&0.5j0.5) gives the nearest complex
number to the argument. However, they're still up for revision if someone
can convince me either that the current definition of <. makes sense or
that the current definitions are used in important code that would break
under this remodeling.
Marshall
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
This email is intended for the addressee(s) named and may contain confidential
and/or privileged information.
If you are not the intended recipient, please notify the sender and then delete
it immediately.
Any views expressed in this email are those of the individual sender except
where the sender expressly and with authority states them to be the views of
the Office of Environment and Heritage, NSW Department of Premier and Cabinet.
PLEASE CONSIDER THE ENVIRONMENT BEFORE PRINTING THIS EMAIL
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm