Okay. After considerable work getting J to compile everything, I can
finally report that this actually works, and that it has the appropriate
effect on complex antibase. I'll place the code on my wiki page but wait
for further feedback to do anything else.

   1 | 0.6j0.6
0.6j0.6
   1 #: 0.6j0.6
0.6j0.6

Marshall

On Sun, Jan 22, 2012 at 2:59 PM, Marshall Lochbaum <mwlochb...@gmail.com>wrote:

> Well, there's a very simple fix for the problem we're seeing here. Here's
> the definition of the remainder function, from vz.c (you don't have to read
> the whole thing!)
>
> ZF2(jtzrem){D a,b,d;Z q;
>  if(ZEZ(u))R v;
>  ZASSERT(!ZINF(v),EVNAN);
>  if(INF(u.re)&&!u.im&&!v.im){
>   if(u.re==inf )R 0<=v.re?v:u;
>   if(u.re==infm)R 0>=v.re?v:u;
>  }
>  ZASSERT(!ZINF(u),EVNONCE);
>  d=u.re*u.re+u.im*u.im;
>  a=u.re*v.re+u.im*v.im; q.re=tfloor(0.5+a/d);
>  b=u.re*v.im-u.im*v.re; q.im=tfloor(0.5+b/d);
>  R zminus(v,ztymes(u,q));
> }
>
> The offending code here is the "0.5+" when q.re and q.im are evaluated. q
> should be the "integer division" of u by v, so that v - u*q (the last line)
> will give us the remainder.
>
> I'm looking into how this affects antibase just to check that I don't mess
> anything up there. However, I think that barring backwards compatibility
> issues, this is definitely a fix that needs to be made.
>
> Marshall
>
> On Sun, Jan 22, 2012 at 2:36 PM, Marshall Lochbaum 
> <mwlochb...@gmail.com>wrote:
>
>> That isn't what complex | does, or what it should do, I think. However,
>> it is a consistent extension of "mod" to the complex numbers--we are just
>> using a different subgroup of the complex numbers to mod out by.
>> Note, however, that this approach adapts poorly to complex left
>> arguments. It still works, by subtracting (real) integer multiples of x
>> from y, but the resultant range is a weird bar in the complex plane.
>> As you noted, it's easy to define your version in terms of real | .
>>
>> Marshall
>>
>>
>> On Sun, Jan 22, 2012 at 2:27 PM, Bo Jacoby <bojac...@yahoo.dk> wrote:
>>
>>> I wanted to take 'mod' of the real part and leave the imaginary part
>>> untouched.
>>>    f=:(|9&o.)+j.&(11&o.)&]
>>>    7 f 73j73+i.6
>>> 3j73 4j73 5j73 6j73 0j73 1j73
>>> Perhaps this is not done by a complex '|' ?
>>>
>>>
>>>
>>>
>>> >________________________________
>>> > Fra: Marshall Lochbaum <mwlochb...@gmail.com>
>>> >Til: Programming forum <programming@jsoftware.com>
>>> >Sendt: 19:50 søndag den 22. januar 2012
>>> >Emne: Re: [Jprogramming] 5|0 1 2 3 4 is not equal to 5|0 1 2 3 4 j.0
>>> >
>>> >It would be possible to change complex mod without changing floor.
>>> Floor is
>>> >consistent on reals and complex numbers, while complex mod is not, so it
>>> >doesn't necessarily need to be fixed.
>>> >
>>> >The problem with complex mod is that for left argument b it that it
>>> ensures
>>> >that the result is in the box defined by corners -:(j./~ _0.5 0.5)*b .
>>> That
>>> >means that it subtracts the closest Gaussian integer multiple of b from
>>> the
>>> >right argument. This is inconsistent with mod for the reals, which
>>> >subtracts the floor under division by b.
>>> >
>>> >Marshall
>>> >
>>> >On Sun, Jan 22, 2012 at 1:28 PM, Henry Rich <henryhr...@nc.rr.com>
>>> wrote:
>>> >
>>> >> Well, I know complex floor was something Gene McDonnell was proud of,
>>> >> and I expect it's embedded in some applications.  You'll need to
>>> produce
>>> >> a compelling argument for changing it.
>>> >>
>>> >> Henry Rich
>>> >>
>>> >> On 1/22/2012 12:38 PM, Marshall Lochbaum wrote:
>>> >> > I'm pretty sure I understand the definition, but I still don't get
>>> the
>>> >> > rationale. Under my scheme the "obvious" complex floor would be (-
>>> 1&|),
>>> >> > which also has the properties of convexity, translatability, and
>>> >> > compatibility listed in the dictionary.
>>> >> >
>>> >> > Marshall
>>> >> >
>>> >> > On Sun, Jan 22, 2012 at 12:08 PM, Henry Rich<henryhr...@nc.rr.com>
>>> >>  wrote:
>>> >> >
>>> >> >> As Don said, make sure you understand complex floor before you
>>> start
>>> >> >> coding.
>>> >> >>
>>> >> >> Henry Rich
>>> >> >>
>>> >> >> On 1/22/2012 11:38 AM, Marshall Lochbaum wrote:
>>> >> >>> The theory of moduli is based on the quotient group of the
>>> integers by
>>> >> a
>>> >> >>> subgroup. For instance, the integers (mod 2) are produced by
>>> taking all
>>> >> >> the
>>> >> >>> integers and identifying all the ones that are even, as well as
>>> all the
>>> >> >>> ones that are odd. Then we get a two-element group which we can
>>> preform
>>> >> >>> addition on: even+even=even, even+odd=odd, etc.
>>> >> >>>
>>> >> >>> To reduce a number in a particular modulus, we need to find a
>>> canonical
>>> >> >>> representation for that number. For positive numbers n the choice
>>> is
>>> >> >> fairly
>>> >> >>> simple: n|l gives the l' such that 0<=l'<n. In the complex plane,
>>> a
>>> >> >> number
>>> >> >>> generates a grid by taking its product with the Gaussian
>>> integers; try
>>> >> >>> 'dot; pensize 2' plot , 1j2 * j./~i:10
>>> >> >>> to see what I mean. Then what we want is a canonical form for what
>>> >> >> happens
>>> >> >>> when we identify all those points together. We're allowed to
>>> "shift" by
>>> >> >> any
>>> >> >>> Gaussian integer times the modulus.
>>> >> >>>
>>> >> >>> Based on this, I think a good way to calculate the modulus is to
>>> get
>>> >> the
>>> >> >>> number into the square that lies counterclockwise of the modulus
>>> >> number.
>>> >> >>> Practically, this means we decompose a complex number y into (a
>>> j.b)*x,
>>> >> >> and
>>> >> >>> then return (1|a)j.(1|b) .
>>> >> >>>
>>> >> >>> I'll see if I can get around to editing this. I have a working
>>> copy of
>>> >> >> the
>>> >> >>> source, but I haven't made sense of it entirely.
>>> >> >>>
>>> >> >>> Marshall
>>> >> >>>
>>> >> >>> On Sun, Jan 22, 2012 at 10:45 AM, Raul Miller<
>>> rauldmil...@gmail.com>
>>> >> >>   wrote:
>>> >> >>>
>>> >> >>>> Yes, this is a bug.
>>> >> >>>>
>>> >> >>>> Someone should fix it.
>>> >> >>>>
>>> >> >>>> J is open source.  (Though distributed sources do not compile
>>> for me,
>>> >> >>>> and I keep getting sidetracked when I investigate forks that
>>> might
>>> >> >>>> compile.)
>>> >> >>>>
>>> >> >>>> --
>>> >> >>>> Raul
>>> >> >>>>
>>> ----------------------------------------------------------------------
>>> >> >>>> For information about J forums see
>>> >> http://www.jsoftware.com/forums.htm
>>> >> >>>>
>>> >> >>>
>>> ----------------------------------------------------------------------
>>> >> >>> For information about J forums see
>>> http://www.jsoftware.com/forums.htm
>>> >> >>>
>>> >> >>
>>> ----------------------------------------------------------------------
>>> >> >> For information about J forums see
>>> http://www.jsoftware.com/forums.htm
>>> >> >>
>>> >> >
>>> ----------------------------------------------------------------------
>>> >> > For information about J forums see
>>> http://www.jsoftware.com/forums.htm
>>> >> >
>>> >> ----------------------------------------------------------------------
>>> >> For information about J forums see
>>> http://www.jsoftware.com/forums.htm
>>> >>
>>> >----------------------------------------------------------------------
>>> >For information about J forums see http://www.jsoftware.com/forums.htm
>>> >
>>> >
>>> >
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>>
>>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to