That works as long as you can live with tolerant comparisons. 0.5=0.5-1e_14 1 0.5-0.5-1e_14 9.99201e_15
-- Raul On Tue, Jan 22, 2013 at 2:26 PM, Devon McCormick <[email protected]> wrote: > I've used this for a long time but it's scarcely tacit: > > 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 > ) > > > > On Tue, Jan 22, 2013 at 1:26 PM, Raul Miller <[email protected]> wrote: > >> That's not something that can be resolved by a simple utility that >> handles floating point numbers. So if this is an issue you should >> implement something that fits your problem domain. >> >> -- >> Raul >> >> On Tue, Jan 22, 2013 at 1:24 PM, Devon McCormick <[email protected]> >> wrote: >> > A bigger problem might be the slight upward bias in this algo. It's >> > exacerbated if you have a lot of halves in your data: >> > >> > rr=. -: 100?@$100 >> > usus rr NB. usus -> usual stats: Min, max, mean, SD >> > 0 49.5 27.63 14.7935 >> > usus round rr NB. Higher mean: significant? >> > 0 50 27.9 14.7802 >> > >> > mean&> (round;]) -: 100?@$100 >> > 22.28 21.975 >> > -/mean&> (round;]) -: 100?@$100 >> > 0.275 >> > -/mean&> (round;]) -: 100?@$100 >> > 0.225 >> > >> > $100 ([: -: ?@$)&.>100$100 >> > 100 >> > >> > usus ([: -/ [: mean&> round ; ]) &> 100 ([: -: ?@$)&.>1e6$100 >> > 0.13 0.365 0.250008 0.0249975 >> > NB. Could be significant... >> > >> > >> > On Tue, Jan 22, 2013 at 12:08 PM, Raul Miller <[email protected]> >> wrote: >> > >> >> I don't think that that definition of round can be tacit and use under. >> >> >> >> A tacit implementation might be: >> >> 1&$: : ([ * <.@+~&1r2@%~) >> >> >> >> Note also: this is a verb, not an adverb. In this definition, 1 is the >> >> default value for x, not a control argument for : >> >> >> >> FYI, >> >> >> >> -- >> >> Raul >> >> >> >> On Tue, Jan 22, 2013 at 11:55 AM, David Ward Lambert >> >> <[email protected]> wrote: >> >> > round =: 1&$: : (dyad def '<.@:(1r2+])&.:(%&x) y') >> >> > assert 1 -: round 1.2 >> >> > assert 1.25 -: 0.25 round 1.2 >> >> > >> >> > Round =: adverb def '<.@:(1r2+])&.:(%&m) y' >> >> > >> >> > Is there a tacit definition of round using under? >> >> > What is the tacit definition of adverb Round? >> >> > Thanks, Dave. >> >> > >> >> > ---------------------------------------------------------------------- >> >> > For information about J forums see >> http://www.jsoftware.com/forums.htm >> >> ---------------------------------------------------------------------- >> >> 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 >> > > > > -- > 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
