If x is n, round is can be written as:
   roundA=: (%&)(<.&.)

   0.05 roundA 1.41 1.449 1.47 1.48
1.4 1.45 1.45 1.5


Following "[Jprogramming] Getting the decimal values",
   http://www.jsoftware.com/pipermail/programming/2009-May/014633.html

   http://www.jsoftware.com/pipermail/programming/2009-May/014641.html

   roundR=: [ (] - |) -:@[ + ]

   0.05 roundR 1.41 1.449 1.47 1.48
1.4 1.45 1.45 1.5

Besides, Residue (dyadic |) is closely related to base.

   0.01 (#: , |) 123.4567
0.0067 0.0067


It would be good to illustrate how Devon's formulas are
innovative compared to the 'numeric' script; including
the use of x=0.05.



> From: Devon McCormick <[email protected]>
> 
> Here's a rounding function I wrote a while ago that includes banker's
> rounding as an option.  I don't know if this is available elsewhere in
> standard libraries and I often find that something I've written has already
> been done, usually better, before.
> 
> However, I like my notational innovation where I specify the rounding by an
> amount, e.g. "0.05 roundNums" rounds to the nearest 0.05 (or "nickel", in
> US).
> 
> Regards,
> 
> Devon
> 
> roundNums=: 3 : 0"1 0
> NB.* roundNums: round numbers y to precision x, e.g.
> NB. 0.1 roundNums 1.23 3.14159 2.718 -> 1.2 3.1 2.7.
> NB. Optional 2nd left argument is single letter specifying
> NB. type of rounding: Up, Down, or Banker's.  Default
> NB. banker's rounding (round halves up or down depending on
> NB. parity of next (scaled) digit) tends to randomize bias.
>    1 roundNums y
> :
>    RT=. 'B'                  NB. Default to Banker's rounding
>    TO=. x                   NB. Precision to which to round.
>    if. (2=#x)*.1=L. x do. 'TO RT'=. x end.
>    scaled=. y%TO            NB. For Banker's: round down if last digit even,
>    select. RT
>    case. 'B' do. RN=. 0.5*(0~:2|<.scaled)+.0.5~:1|scaled   NB. up if odd.
>    case. 'D' do. RN=. (0.5=1|scaled){0 _0.5       NB. Round halves down.
>    case. 'U' do. RN=. 0.5                         NB. Round halves up.
>    end.
>    TO*<.scaled+RN
> NB.EG 2 2 4 4 -: 1 roundNums 1.5 2.5 3.5 4.5       NB. Banker's: odd up,
> even down
> NB.EG 2 3 4 5 -: (1;'U') roundNums 1.5 2.5 3.5 4.5 NB. round up
> NB.EG 1 2 3 4 -: (1;'D') roundNums 1.5 2.5 3.5 4.5 NB. round down
> )
> 
> 
> On Sun, May 10, 2009 at 2:38 AM, Sherlock, Ric wrote:
> 
> > > From: Martin Kreuzer
> > > While fumbling around with base notation, I found
> > >   5b34
> > > 19
> > >   5b35
> > > 20
> > >   5b36
> > > 21
> > > while I was waiting to see an error message for the second and third
> > > case (using digits not in the set for this base, beyond 0 1 2 3 4).
> > > This is puzzling me.
> >
> > Seems consistent to me.
> >  5b36
> > There are 6 "ones" (5^0) and 3 "fives" (5^1), that makes 21.
> >
> > Obviously you can get 21 using 5b41 too.
> >
> > > 2
> > > To use verbs like "roundint" or "roundbanker" is there a module I
> > > need to load, if so which one..?
> >
> > Yes you need to load the numeric script:
> >  load 'numeric'
> >
> > If you are looking for something that you think might be available in a
> > script somewhere in the J base library, then the Find in Files utility can
> > be useful:
> >
> > Edit | Find in Files
> >
> > Choose the "Folders" tab.
> > Find what:   roundbaker
> > In folders:  ~system
> >
> > Click "Find" button.
> >
> > In the results:
> > Place your cursor in the line that you are interested in.
> > Click "Open" button.
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> 
> 
> 
> -- 
> Devon McCormick, CFA
> ^me^ at acm.
> org is my
> preferred e-mail
> ----------------------------------------------------------------------
> 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