You need to use Marshall's two's complement inverse

     tcinv
  [: #. (* (_1 ^ 0 = i.@#))"1
     tcinv tc i: 6
  _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6

In emails I insert an extra space in front of J output -- this seems to 
protect it from the vagaries of email.

I will look at your post, thanks for repeating it.

On 12/16/2011 2:40 AM, Linda Alvord wrote:
> Here's what I get.  The line will split but when I paste it back together:
>
>      tc =: #:~ 2 #~ [:>./ 1 + [:>. (2 ^. |)`(2 ^.>:)@.(0<: ])"0
>     ]a=:tc i:6
> 1 0 1 0
> 1 0 1 1
> 1 1 0 0
> 1 1 0 1
> 1 1 1 0
> 1 1 1 1
> 0 0 0 0
> 0 0 0 1
> 0 0 1 0
> 0 0 1 1
> 0 1 0 0
> 0 1 0 1
> 0 1 1 0
>     #.a
> 10 11 12 13 14 15 0 1 2 3 4 5 6
>
> Not good. But your display does not have the first column, so maybe you need
> to post the function again.
>
> I tried to remove the first column to match your dislay:
>
>     ]b=:1}."1 a
> 0 1 0
> 0 1 1
> 1 0 0
> 1 0 1
> 1 1 0
> 1 1 1
> 0 0 0
> 0 0 1
> 0 1 0
> 0 1 1
> 1 0 0
> 1 0 1
> 1 1 0
>
>     #.b
> 2 3 4 5 6 7 0 1 2 3 4 5 6
>
> This is also not working.
>
> Did you really read my post in a reply to a message to Devon? I'll repeat it
> here as I am interested in your comments:
>
>     ]a=:8+i.15
> 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
>     ]b=:15#15
> 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
>     ]c=:a-b
> _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7
>     f=: 13 :'(x#2)#:y'
>     f
> ] #:~ 2 #~ [
>
> The function f converts the lists to binary numbers.  The largest number  22
> is less than  32  so only  5  digits are require.
>
>    ]aa=:5 f a
> 0 1 0 0 0
> 0 1 0 0 1
> 0 1 0 1 0
> 0 1 0 1 1
> 0 1 1 0 0
> 0 1 1 0 1
> 0 1 1 1 0
> 0 1 1 1 1
> 1 0 0 0 0
> 1 0 0 0 1
> 1 0 0 1 0
> 1 0 0 1 1
> 1 0 1 0 0
> 1 0 1 0 1
> 1 0 1 1 0
>
>     ]bb=:5 f b
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
> 0 1 1 1 1
>
>   The result below is the difference in  J  between the two arrays above. It
> is not a conversion using  #:
>
>     ]cc=:aa-bb
> 0  0 _1 _1 _1
> 0  0 _1 _1  0
> 0  0 _1  0 _1
> 0  0 _1  0  0
> 0  0  0 _1 _1
> 0  0  0 _1  0
> 0  0  0  0 _1
> 0  0  0  0  0
> 1 _1 _1 _1 _1
> 1 _1 _1 _1  0
> 1 _1 _1  0 _1
> 1 _1 _1  0  0
> 1 _1  0 _1 _1
> 1 _1  0 _1  0
> 1 _1  0  0 _1
>
> For comparison, the result  cc2  is obtained  as a  J  result using  #:
>     ]cc2=: 5 f c
> 1 1 0 0 1
> 1 1 0 1 0
> 1 1 0 1 1
> 1 1 1 0 0
> 1 1 1 0 1
> 1 1 1 1 0
> 1 1 1 1 1
> 0 0 0 0 0
> 0 0 0 0 1
> 0 0 0 1 0
> 0 0 0 1 1
> 0 0 1 0 0
> 0 0 1 0 1
> 0 0 1 1 0
> 0 0 1 1 1
>
> Or:
>
>    ]cc3=:#:c
> 0 0 1
> 0 1 0
> 0 1 1
> 1 0 0
> 1 0 1
> 1 1 0
> 1 1 1
> 0 0 0
> 0 0 1
> 0 1 0
> 0 1 1
> 1 0 0
> 1 0 1
> 1 1 0
> 1 1 1
>
> Both cc2 and cc3 seem implausible because all numbers are known positive
> numbers. Now look at  cc :
>
>     w=: 13 :'(x,y)$|.2^i.y'
>     w
> , $ [: |. 2 ^ [: i. ]
>     15 w 5
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
> 16 8 4 2 1
>
>     cc*15 w 5
>   0  0 _4 _2 _1
>   0  0 _4 _2  0
>   0  0 _4  0 _1
>   0  0 _4  0  0
>   0  0  0 _2 _1
>   0  0  0 _2  0
>   0  0  0  0 _1
>   0  0  0  0  0
> 16 _8 _4 _2 _1
> 16 _8 _4 _2  0
> 16 _8 _4  0 _1
> 16 _8 _4  0  0
> 16 _8  0 _2 _1
> 16 _8  0 _2  0
> 16 _8  0  0 _1
>
>
>     +/"1 cc*15 w 5
> _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7
>
> This is c!
>
> Not only that,  J  knows it is c.
>
>     #.cc
> _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7
>
> So what do you think?
>
> Linda
>
> -----Original Message-----
> From: programming-boun...@jsoftware.com
> [mailto:programming-boun...@jsoftware.com] On Behalf Of Kip Murray
> Sent: Friday, December 16, 2011 2:43 AM
> To: Programming forum
> Subject: Re: [Jprogramming] How #: should have been designed
>
> The verb tc (two's complement) appears to work
>
>       tc =: #:~ 2 #~ [:>./ 1 + [:>. (2 ^. |)`(2 ^.>:)@.(0<: ])"0
>
>       twoscomplement i: 6
>    0 1 0
>    0 1 1
>    1 0 0
>    1 0 1
>    1 1 0
>    1 1 1
>    0 0 0
>    0 0 1
>    0 1 0
>    0 1 1
>    1 0 0
>    1 0 1
>    1 1 0
>
>       tc i: 6
>    1 0 1 0
>    1 0 1 1
>    1 1 0 0
>    1 1 0 1
>    1 1 1 0
>    1 1 1 1
>    0 0 0 0
>    0 0 0 1
>    0 0 1 0
>    0 0 1 1
>    0 1 0 0
>    0 1 0 1
>    0 1 1 0
>
>
> On 12/15/2011 12:52 PM, Kip Murray wrote:
>> twoscomplement i: 4 NB. error
>> 1 0 0
>> 1 0 1
>> 1 1 0
>> 1 1 1
>> 0 0 0
>> 0 0 1
>> 0 1 0
>> 0 1 1
>> 1 0 0
>>
>> rp =: [: }: [: i: 2 ^<: NB. representable in y bits
>>
>> rp 3
>> _4 _3 _2 _1 0 1 2 3
>>
>> twoscomplement rp 3 NB. OK
>> 1 0 0
>> 1 0 1
>> 1 1 0
>> 1 1 1
>> 0 0 0
>> 0 0 1
>> 0 1 0
>> 0 1 1
>>
>>
>> On 12/14/2011 9:13 AM, Raul Miller wrote:
>>> The subject line of this thread is arguably wrong -- there are a
>>> variety of "good ways" of decomposing integers to binary.
>>>
>>> That said, it's interesting to think about the various proposals
>>> expressed in terms similar to those which could be used to implement
>>> monadic #:
>>>
>>> antibase2=: #:~ 2 #~ 1 + 2<.@^. 1>.>./@,@:|@:<.
>>> twoscomplement=: #:~ 2 #~ 1 + 2<.@^. 1 +>./@,@:|@:<.
>>> signwithbits=: #:~ 0, 2 #~ 1 + 2<.@^. 1>.>./@,@:|@:<.
>>>
>>> (In all cases the #: here is dyadic, so these definitions are
>>> independent of the definition of monadic #:)
>>>
>>> antibase2 i: 3
>>> 0 1
>>> 1 0
>>> 1 1
>>> 0 0
>>> 0 1
>>> 1 0
>>> 1 1
>>> twoscomplement i: 3
>>> 1 0 1
>>> 1 1 0
>>> 1 1 1
>>> 0 0 0
>>> 0 0 1
>>> 0 1 0
>>> 0 1 1
>>> signwithbits i: 3
>>> _1 0 1
>>> _1 1 0
>>> _1 1 1
>>> 0 0 0
>>> 0 0 1
>>> 0 1 0
>>> 0 1 1
>>>
>>> There's also (* * #:) but that one assumes the antibase2
>>> implementation...
>>>
> ----------------------------------------------------------------------
> 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