Linda, responding to your earlier post, let us work with small decimal 
numbers and 16 binary digits.  Define

binary =: (16#2) #: ]  NB. binary from decimal

decimal =: #.  NB. decimal from binary

NB. Actually monadic #. computes +/ y * |. 2 ^ i. # y  <-- the point

NB. From that you can deduce #. y + z is (#. y) + #. z

NB. and #. c * y is c * #. y for scalar c .


I hear you saying, for example

    _6 -: decimal (binary 13) - binary 19
1

Looking behind the scenes we see

    (binary 13 19), (binary 13) - binary 19
0 0 0 0 0 0 0 0 0 0 0  0 1 1  0 1
0 0 0 0 0 0 0 0 0 0 0  1 0 0  1 1
0 0 0 0 0 0 0 0 0 0 0 _1 1 1 _1 0

Yes,

    decimal 0 0 0 0 0 0 0 0 0 0 0 _1 1 1 _1 0
_6


Also

    - binary 6
0 0 0 0 0 0 0 0 0 0 0 0 0 _1 _1 0

    decimal - binary 6
_6


Finally (notice the 2)

    (binary 13) + binary 19
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2

    decimal (binary 13) + binary 19
32


Reading the examples above you should remember

#. y + c * z is (#. y) + #. c * z is (#. y) + c * #. z

-- this includes the case scalar c is _1 .


On 12/16/2011 2:40 AM, Linda Alvord wrote:
...
> 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