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 <mwlochb...@gmail.com> Subject: Re: [Jprogramming] 5|0 1 2 3 4 is not equal to 5|0 1 2 3 4 j.0 To: Programming forum <programming@jsoftware.com> 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