I just finished posting my thoughts on this and found your function Henry.
 
    hcinv =: ([: -/ [: #. (,: [: +: 1 {. ]))"1
   d
1 1 0
1 1 1
0 0 0
0 0 1
0 1 0

   hcinv d
_2 _1 0 1 2

This shouldn't be  _2 _1 0 1 2   because  d  really is  6 7 0 1 2
 
  ]c
_1 1  0
 0 0 _1
 0 0  0
 0 1 _1
 0 1  0

   2 2 2#.c
_2 _1 0 1 2

Base seems happy with negative numbers but #: is not so happy.

Linda

-----Original Message-----
From: programming-boun...@jsoftware.com
[mailto:programming-boun...@jsoftware.com] On Behalf Of Kip Murray
Sent: Saturday, December 10, 2011 7:48 PM
To: Programming forum
Subject: Re: [Jprogramming] How #: should have been designed

Cool.  I think it is an improvement because it neatly avoids a case 
statement.  Now I wonder if we could implement two's-complement addition 
and multiplication with overflow, basing these on bitwise operations

    0 + 0 is 0, 0 + 1 is 1 + 0 is 1, and 1 + 1 is 1 0

    0 * 0 is 0 * 1 is 1 * 0 is 0, and 1*1 is 1

That is, I do not want hc and hcinv to be used except to produce data 
and check answers, and I want n-bit two's-complement answers for n-bit 
two's-complement data so some of them will be wrong because of overflow.

Here for Linda is Henry's hcinv expressed without conjunctions other 
than " .

    hcinv =: ([: -/ [: #. (,: [: +: 1 {. ]))"1

On 12/10/2011 10:00 AM, Henry Rich wrote:
> Same idea, better implementation
>
>      hcinv =. -/@:#.@:(,: +:@(1&{.))"1
>
> Henry Rich
>
> On 12/10/2011 10:48 AM, Henry Rich wrote:
>> Maybe not an improvement, but this is how I would have done back in my
>> hardware-design days:
>>
>> hcinv =. -~/@:#.@:(~:/\)@:((,1)&,:)"1
>>
>> Quite a bit more elegant in wires than in J!
>>
>> Henry Rich
>>
>> On 12/10/2011 1:01 AM, Kip Murray wrote:
>>> Now we need an inverse for Raul's improved #: ("hash colon")
>>>
>>>         hc  NB. Raul's improved #:
>>>      {.@#:@(,: (2 * |))
>>>
>>>         hc i: 2
>>>      1 1 0
>>>      1 1 1
>>>      0 0 0
>>>      0 0 1
>>>      0 1 0
>>>
>>>         hcinv  NB. improvement sought
>>>      2&#.`(2&#.@}. - 2 ^<:@#)@.{."1
>>>
>>>         hcinv hc i: 2
>>>      _2 _1 0 1 2
>>>
>>> On 12/8/2011 2:41 PM, Raul Miller wrote:
>>> ...
>>> But this would work just as well, as a model:
>>>
>>>         {.@#:@(,:  2 * |)i:2
>>>      1 1 0
>>>      1 1 1
>>>      0 0 0
>>>      0 0 1
>>>      0 1 0
>>> ----------------------------------------------------------------------
>>> 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