Slashdot Mirror


Rounding Algorithms

dtmos writes "Clive Maxfield has an interesting article up on PL DesignLine cataloging most (all?) of the known rounding algorithms used in computer math. As he states, "...the mind soon boggles at the variety and intricacies of the rounding algorithms that may be used for different applications ... round-up, round-down, round-toward-nearest, arithmetic rounding, round-half-up, round-half-down, round-half-even, round-half-odd, round-toward-zero, round-away-from-zero, round-ceiling, round-floor, truncation (chopping), round-alternate, and round-random (stochastic rounding), to name but a few." It's a good read, especially if you *think* you know what your programs are doing."

9 of 279 comments (clear)

  1. Round this! by Anonymous Coward · · Score: 5, Funny

    1.44th post!

  2. Most important... by T-Ranger · · Score: 5, Funny

    Round down and put the extra aside. Say, in your own account. Like the have-a-penny-need-a-penny jar at the local Gulp-n-Blow.

    1. Re:Most important... by slothman32 · · Score: 5, Informative

      There's some straight line algorithm that uses a similar method.
      It keeps adding the slope value for every x increment and when it overloads it also makes the y position go up one.
      Or something like that. Bresenham's I believe.

      To get on topic I would use the usual "(x).5 to (x+1).499~9 goes to (x+1)" way.
      For negative, just ignore the sign when doing it, e.g. -1.6 -> -2

      --
      Why don't you guys have friends or journals?
  3. My personal rounding program by charlesbakerharris · · Score: 5, Funny
    For rounding, I use the following:
    • Mountain Dew
    • Couch
    • Lack of willpower
    • Utter disdain for annual resolutions I made less than a week ago
    • DiGiorno's pizzas.
    Seems to work.
  4. I read the first half of the article... by under_score · · Score: 5, Interesting

    ...where it discusses the various rounding methods. I had actually thought of/used most of them. The one that was new to me was the round-half-even (banker's rounding). Very cool idea, and I had no idea it was commonly used.

    This is a great reference article! If you are programmer working with numerical algorithms, keep this article handy.

  5. Re:Think you know.... by Rosco+P.+Coltrane · · Score: 5, Funny

    Why would my wife being pregnant be a problem?

    You'll know 13 years from now :)

    --
    "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
  6. Office Space by TubeSteak · · Score: 5, Funny
    PETER
    So when the subroutine compounds the interest, right, it uses all these extra decimals places that just get rounded off. So we just simplify the whole thing and we just round it down and drop the remainder into an account that we own.

    JOANNA
    So you're stealing.

    PETER
    Ah, no. No. You don't understand. It's, uh, very complicated. It's, uh, it's, it's aggregate so I'm talking about fractions of a cent that, uh, over time, they add up to a lot.
    --
    [Fuck Beta]
    o0t!
  7. Social Applications by Kesch · · Score: 5, Funny

    So it turns out instead of 2, there are more like 9 different types of people.

    The classics:
    Those who round a glass of water up (Has been filled)
    Those who round it down (Has been emptied)

    The oddballs:
    The round-half-up crowd(Half or greater is filled)
    The round-half-down crowd(Half or less is empty)
    The round toward zero types(Always empty)
    The round away from zero groupies(Always Full)
    The round alternate weirdos(They get interesting when you give them two glasses)
    The round random subset(Carry around a coin or die to decide such problems)
    And finally...
    The truncate ones who cannot handle such a problem and smash the glass to make sure it is empty.

    --
    If this signature is witty enough, maybe somebody will like me.
  8. Slide Rules and precision by goombah99 · · Score: 5, Interesting

    These days kids are not taught to round. Instead you just do the compuations at absurdly large precision then on the last step round off. This way you don't accumulate systematic round-off error. It's good as long as you have the luxury of doing that. It used to be that C-programmers had a cavalier attitude of always writing the double-precision libraries first. Which is why Scientific programmers were initially slow to migrate from fortran.

    These days it's not so true any more. First there's lots of good scientific C programmers now so the problem of parcimonius computation is well appreciated. Moreover the creation of math co-processing, vector calcualtions, and math co-processors often makes it counter-intuitive what to do.

      For example it's quite likely that brute forcing a stiff calculation is double precision using a numeric co-processor will beat doing it in single precision with a few extra steps added to keep the precision in range. So being clever is not always helpful. people used to create math libraries that even cheated on using the full precision of the avialable floating point word size (sub-single precision accuracy) since it was fast (e.g. the radius libs for macintoshes) Pipelining adds more confusion, since the processor can be doing other stuff during those wait states for the higher precision. Vector code reverse this: if you are clever maybe shaving precision willlet you double the number of simultanoeus calcualtions.

    In any case, what was once intuitive: minimal precision and clever rounding to avoid systematic errors means faster computation is no longer true.

    Of course in the old days people learned to round early in life: no one wanted to use a 5 digit precision slide rule if you could use a 2 digit precision slide rule.

    --
    Some drink at the fountain of knowledge. Others just gargle.