What I wanted was for the sequence of digits to be unique up to leading
zeros, so that (-:/@,:"1) -: (=&#."1) . That property is true for
nonnegative representations, but with negative numbers we have 0 _1 0 1 and
_1 1 0 1 as possibilities. It's not simple to move between representations
if we allow both of those.

Marshall

On Mon, Dec 12, 2011 at 8:57 PM, Henry Rich <henryhr...@nc.rr.com> wrote:

> ? 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
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to