? What 'uniqueness' do you mean?  With only the MSB made negative, there 
is a unique representation of any value in n bits.  It is true that _3 is

_1 0 1
_1 1 0 1
_1 1 1 0 1

etc, depending on the length of the representation.

Henry Rich

On 12/12/2011 8:44 PM, Marshall Lochbaum wrote:
> So something like this:
>     (-@(<&0) ,. #:) i:5
> _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
>
> With that we lose all hope of uniqueness, though.
>
> Marshall
>
> On Mon, Dec 12, 2011 at 8:20 PM, Henry Rich<henryhr...@nc.rr.com>  wrote:
>
>> Agreed.  What I'm saying is, make the 2's-comp sign bit a _1, and all
>> will be well.
>>
>>     #: _10
>> 0 1 1 0
>>
>> I didn't know it did that!  That seems wrong:
>>
>>     #: _10 20
>> 1 0 1 1 0
>> 1 0 1 0 0
>>
>> Just change the sign of _10 from 1 to _1:
>>
>>     #. _1 0 1 1 0
>> _10
>>
>> The nice thing about this is, you know if a number is negative you have
>> to convert it to binary in 2's-complement; and if it has a leading _1 it
>> represents a negative; so #. and #: will handle positive and negative
>> numbers smoothly, and are compatible with current code except for the
>> behavior of #: on negatives, which we agree is anomalous.
>>
>> And you can do |@:#: if you don't like the negative sign bit.
>>
>> Still differs from 2&#:, though.
>>
>> Henry Rich
>>
>> On 12/12/2011 7:44 PM, Marshall Lochbaum wrote:
>>> You can't, unfortunately. _10, for example, is #._1 0 1 1 0 , which is
>> the
>>> shortest possible representation for it. In fact, my code only gives
>>> adjacent _1 1's on powers of two. In this case it is wrong-- _8 should be
>>> _1 0 0 , not _1 1 0 0 .
>>>
>>> Marshall
>>>
>>> On Mon, Dec 12, 2011 at 7:07 PM, Henry Rich<henryhr...@nc.rr.com>
>>   wrote:
>>>
>>>> I like your leading-digit-negative idea better too.  Rather than
>>>> prepending a leading _1, you could just change the high-order 1 to _1 .
>>>>
>>>> Henry Rich
>>>>
>>>> On 12/12/2011 5:57 PM, Marshall Lochbaum wrote:
>>>>> Those are some very good arguments. Personally, I think my version is
>>>>> mathematically more well-founded (for instance, when we define the
>>>> decimal
>>>>> for a real number, we simply make the first digit an integer and the
>>>> rest,
>>>>> those after the decimal place, nonnegative and less than the base).
>>>>> However, you've convinced me that your version works better within J,
>> at
>>>>> least for arbitrary use. Within particular applications a user might
>> want
>>>>> something different, but he can code that himself.
>>>>> I still wouldn't recommend changing J for that nuance, though.
>>>>>
>>>>> I do think that #: for scalar left arguments should act the same as
>>>> #.^:_1,
>>>>> rather than | . Some day, when I get that source working, I might look
>>>> into
>>>>> that...
>>>>>
>>>>> Marshall
>>>>>
>>>>> On Mon, Dec 12, 2011 at 5:25 PM, Dan Bron<j...@bron.us>    wrote:
>>>>>
>>>>>> Raul wrote:
>>>>>>>     And (* * #:@:|) achieves this result.
>>>>>>
>>>>>> I used (*@:] * (#.^:_1 |)) because if we're going to change #: , we
>>>> need a
>>>>>> consistent definition for all bases.  (But I hear your implication
>> that
>>>> we
>>>>>> are not going to change #: .)
>>>>>>
>>>>>> Oh, and I just realized that my ab1 was not a faithful reproduction of
>>>>>> Marshall's verb, so in my comments below, substitute his original for
>>>> ab1 .
>>>>>>     Sorry about that!
>>>>>>
>>>>>> -Dan
>>>>>>
>>>>>> PS:
>>>>>>
>>>>>> Still bugs me that 2 #: y<==>     2 #.^:_1 y doesn't hold non-scalar y
>> .
>>>>    It
>>>>>> contradicts the dictionary, and makes discussions like this more
>>>> difficult.
>>>>>>
>>>>>> For example, I want to be able to say *@:] * (#: |) is the
>>>>>> radix-generalized equivalent of your binary * * #:@:| (i.e. the dyad
>> to
>>>>>> your monad),  but it isn't.  So I have to use circumlocutions like
>>>>    #.^:_1
>>>>>>     .
>>>>>>
>>>>>> I reported this in 2006; maybe someone who's got the J source to build
>>>> can
>>>>>> fix it?
>>>>>>
>>>>>>
>>>>>>
>>>>
>> http://www.jsoftware.com/jwiki/System/Interpreter/Bugs06#definitionofdyad.23.3Aincomplete
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: programming-boun...@jsoftware.com [mailto:
>>>>>> programming-boun...@jsoftware.com] On Behalf Of Raul Miller
>>>>>> Sent: Monday, December 12, 2011 5:02 PM
>>>>>> To: Programming forum
>>>>>> Subject: Re: [Jprogramming] How #: should have been designed
>>>>>>
>>>>>> And (* * #:@:|) achieves this result.
>>>>>>
>>>>>>      #. (* * #:@:|) i: 3
>>>>>> _3 _2 _1 0 1 2 3
>>>>>>
>>>>>> That's probably good enough for now.
>>>>>>
>>>>>> --
>>>>>> Raul
>>>>>>
>>>>>> On Mon, Dec 12, 2011 at 4:34 PM, Dan Bron<j...@bron.us>    wrote:
>>>>>>> I don't think there's a violation of a uniqueness constraint.
>>>>>>>
>>>>>>> Consider: for a positive scalar argument y, then #:y is unique
>>>>>> (trivially).
>>>>>>> And, in the approach we're discussing, when the argument is negative,
>>>> as
>>>>>> in
>>>>>>> #:-y, then the result is just -#:y . Therefore, #:-y is also unique,
>>>> and
>>>>>>> furthermore distinct from #:y.  That is:  the results of #: are
>> always
>>>>>>> strictly non-positive or non-negative.  No individual result of #:
>> will
>>>>>>> contain both positive and negative digits.
>>>>>>>
>>>>>>> I also wouldn't mind your proposal of (#:-y) = _1 , #: y , but I
>> think
>>>>>> the
>>>>>>> -#:y approach can claim some advantages.  Given:
>>>>>>>
>>>>>>>           ab0 =: *@:] * (#.^:_1 |)
>>>>>>>           ab1 =: (_1 * 0>    ]) ,"0 1^:(0~:+/@:[) #.^:_1    NB.
>>   Distilled
>>>>>> from
>>>>>>> your code
>>>>>>>
>>>>>>> We note first that ab0 is simpler than ab1.  That means it's easier
>> to
>>>>>>> understand and implement (and debug).
>>>>>>>
>>>>>>> Second, the results of ab0 are easier to interpret.  Knowing the
>>>>>> definition
>>>>>>> of both verbs, you could tell me what decimal number _1 _2 _3
>>>> represents
>>>>>> on
>>>>>>> sight, but with _1 8 7 7 you'd have to do some mental calculation
>> (they
>>>>>> both
>>>>>>> represent the quantity _123).  This advantage is cumulative when
>>>>>> reasoning
>>>>>>> about arrays of results (i.e., in J).
>>>>>>>
>>>>>>> Third, critically, the shape of ab0's results doesn't change with the
>>>>>> sign
>>>>>>> of its argument.  This is important and valuable in a J context.  For
>>>>>>> example:
>>>>>>>
>>>>>>>              _5 + 6
>>>>>>>           1
>>>>>>>              _5 +&.(2&ab0 :. #.) 6
>>>>>>>           1
>>>>>>>              _5 +&.(2&ab1 :. #.) 6
>>>>>>>           |length error
>>>>>>>           |   _5    +&.(2&ab1 :.#.)6
>>>>>>>
>>>>>>> Moreover, this feature is particularly important for digit-arrays,
>>>>>> because J
>>>>>>> pads on the right, but in the positional number system, right-padding
>>>> is
>>>>>>> anathema.  That is, prepending a _1 exacerbates a problem #: already
>>>> has
>>>>>> (by
>>>>>>> allowing more opportunities for it to arise):
>>>>>>>
>>>>>>>              my_array =: 2 ab1 3 2 1
>>>>>>>              my_array =: my_array , 2 ab1 _1 _2 _3
>>>>>>>              #. my_array
>>>>>>>           6 4 2 _1 _2 _3
>>>>>>>              NB.  Ouch! Where'd my 3 2 1 go?
>>>>>>>
>>>>>>> Finally, I'd argue that the -#:y also makes intuitive sense: _123
>> means
>>>>>>> "subtract one hundred, [subtract] two tens, and [subtract] three
>>>> units".
>>>>>>> Though this is subjective, it does allow one to reason about negative
>>>>>>> numbers in a straightforward and expected way:
>>>>>>>
>>>>>>>              _123 + 456
>>>>>>>           333
>>>>>>>              _1 _2 _3 + 4 5 6
>>>>>>>           3 3 3
>>>>>>>              10 #. _1 _2 _3 + 4 5 6
>>>>>>>           333
>>>>>>>
>>>>>>>              _123 * 456
>>>>>>>           _56088
>>>>>>>              _1 _2 _3 * 456
>>>>>>>           _456 _912 _1368
>>>>>>>              10 #. _1 _2 _3 * 456
>>>>>>>           _56088
>>>>>>>
>>>>>>> BTW, though I am using decimal examples, all these comments apply
>>>>>> equally to
>>>>>>> binary numbers, and every other base.
>>>>>>>
>>>>>>> -Dan
>>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: programming-boun...@jsoftware.com
>>>>>>> [mailto:programming-boun...@jsoftware.com] On Behalf Of Marshall
>>>>>> Lochbaum
>>>>>>> Sent: Monday, December 12, 2011 2:55 PM
>>>>>>> To: Programming forum
>>>>>>> Subject: Re: [Jprogramming] How #: should have been designed
>>>>>>>
>>>>>>> The problem with this is that we would prefer not to use negative
>>>> numbers
>>>>>>> in antibase, since they can violate uniqueness of base
>> representation.
>>>>>>> There's really no solution to this--my recommendation is to just
>> never
>>>>>> feed
>>>>>>> negative numbers to #: . However, an option that minimizes negative
>>>>>> numbers
>>>>>>> (and is very close to simply having two's complement base
>>>> representation)
>>>>>>> is to make the first digit negative if the number is negative. Thus
>> #:
>>>>>>> becomes
>>>>>>> base =. [: |."_1@:>    |.@(#:`(_1,#:)@.(<&0))&.>
>>>>>>> Basically, use J's #: , and prepend a _1 if the input is negative.
>> Then
>>>>>>> reverse, box, open everything for fill, and reverse again.
>>>>>>>
>>>>>>>      base i:5
>>>>>>> _1  0  1 1
>>>>>>> _1  1  0 0
>>>>>>>     0 _1  0 1
>>>>>>>     0 _1  1 0
>>>>>>>     0  0 _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
>>>>>>>      #. base i:5
>>>>>>> _5 _4 _3 _2 _1 0 1 2 3 4 5
>>>>>>>
>>>>>>> Marshall
>>>>>>>
>>>>>>> On Mon, Dec 12, 2011 at 2:09 PM, Dan Bron<j...@bron.us>    wrote:
>>>>>>>
>>>>>>>> Maybe we should explore a different track.  Forget all about the
>>>> history
>>>>>>> of
>>>>>>>> computing hardware, and the advantages of one representation over
>>>>>> another
>>>>>>>> when designing circuits.  In purely mathematical terms, what are the
>>>>>>>> decimal
>>>>>>>> digits of the base-10 number -123 ?
>>>>>>>>
>>>>>>>> Working backwards:
>>>>>>>>
>>>>>>>>      _123                                        NB.  begin
>>>>>>>>      -123                                        NB.
>>>>    notation->operation
>>>>>>>>      _1 * 123                                    NB.  definition of -
>>>>>>>>      _1 * (1 * 10^2) + (2 * 10^1) + ( 3 * 10^0)  NB.  positional
>> number
>>>>>>>> notation
>>>>>>>>      (_1 * 10^2) + (_2 * 10^1) + (_3 * 10^0)     NB.  distribution
>> of *
>>>>>> over
>>>>>>> +
>>>>>>>>      _1 _2 _3 +/ . * 10^2 1 0                    NB.  array
>>>> simplification
>>>>>>>>      10 #. _1 _2 _3                              NB.  definition of
>> #.
>>>>>>>>
>>>>>>>> Thus, to satisfy the purposes of inversion, we should have:
>>>>>>>> [all examples from here on are purely theoretical, and the
>>>>>>>> results differ in the extant implementations of J]:
>>>>>>>>
>>>>>>>>      10 #.^:_1: _123
>>>>>>>> _1 _2 _3
>>>>>>>>
>>>>>>>> And, analogously in base 2:
>>>>>>>>
>>>>>>>>      2 #.^:_1: 2b_101                            NB.  2b_101 is J's
>>>>>> notation
>>>>>>>> for -101 in base 2
>>>>>>>> _1 0 _1
>>>>>>>>      #: 2b_101                                   NB.  #:<=>
>> 2&#.^:_1:
>>>>>>>> _1 0 _1
>>>>>>>>      #: _5                                       NB.  _5<=>    2b_101
>>>>>> (numbers
>>>>>>>> are analytic)
>>>>>>>> _1 0 _1
>>>>>>>>
>>>>>>>> QED.*
>>>>>>>>
>>>>>>>> -Dan
>>>>>>>>
>>>>>>>> *  Backwards compatibility notwithstanding
>>>>>>>>
>>>>>>>> PS:  What implications does this have for modulus, as in _10 | 123 ?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>>> 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
>>>
>> ----------------------------------------------------------------------
>> 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