Rounding: Difference between revisions
No edit summary |
→History: fix formatting |
||
Line 67: | Line 67: | ||
The ''Round-to-even'' method has served as the [[ASTM]] (E-29) standard since 1940. The origin of the terms ''unbiased rounding'' and ''statistician's rounding'' are fairly self-explanatory. In the 1906 4th edition of ''Probability and Theory of Errors'' [http://historical.library.cornell.edu/cgi-bin/cul.math/docviewer?did=05170001&view=50&frames=0&seq=48] Robert Woodward called this "the computer's rule" indicating that it was then in common use by [[human computer]]s who calculated mathematical tables. [[Churchill Eisenhart]]'s 1947 paper "Effects of Rounding or Grouping Data" (in ''[[Selected Techniques of Statistical Analysis]]'', McGrawHill, 1947, Eisenhart, Hastay, and Wallis, editors) indicated that the practice was already "well established" in data analysis. |
The ''Round-to-even'' method has served as the [[ASTM]] (E-29) standard since 1940. The origin of the terms ''unbiased rounding'' and ''statistician's rounding'' are fairly self-explanatory. In the 1906 4th edition of ''Probability and Theory of Errors'' [http://historical.library.cornell.edu/cgi-bin/cul.math/docviewer?did=05170001&view=50&frames=0&seq=48] Robert Woodward called this "the computer's rule" indicating that it was then in common use by [[human computer]]s who calculated mathematical tables. [[Churchill Eisenhart]]'s 1947 paper "Effects of Rounding or Grouping Data" (in ''[[Selected Techniques of Statistical Analysis]]'', McGrawHill, 1947, Eisenhart, Hastay, and Wallis, editors) indicated that the practice was already "well established" in data analysis. |
||
The origin of the term ''bankers' rounding'' remains more obscure. If this rounding method was ever a standard in banking, the evidence has proved extremely difficult to find. To the contrary, section 2 of the European Commission report ''The Introduction of the Euro and the Rounding of Currency Amounts'' [http://ec.europa.eu/economy_finance/publications/publication1224_en.pdf] suggests that there had previously been no standard approach to rounding in banking, and specifies that "half-way" amounts should be rounded up. |
|||
== Other methods of rounding== |
== Other methods of rounding== |
Revision as of 13:44, 25 February 2009
- For lip-rounding in phonetics, see Labialisation and Roundedness. For other uses, see Rounding (disambiguation).
This article needs additional citations for verification. (November 2008) |
Rounding involves reducing the number of significant digits in a number. The result of rounding is a "shorter" number having fewer non-zero digits yet similar in magnitude. The result is less precise but easier to use.
For example: 73 rounded to the nearest ten is 70, because 73 is closer to 70 than to 80.
Researchers may analyze rounding as a form of quantization.
People follow many different rules and procedures when rounding. Some of the more popular appear below.
Common method
![]() | This article needs attention from an expert in section. Please add a reason or a talk parameter to this template to explain the issue with the article.(February 2009) |
This method is commonly used in mathematical applications, for example in accounting. It is the one generally taught in elementary mathematics classes. This method is also known as Asymmetric Arithmetic Rounding or Round-Half-Up (Asymmetric Implementation)
- Decide which is the last digit to keep.
- Increase it by 1 if the next digit is 5 or more (this is called rounding up)
- Leave it the same if the next digit is 4 or less (this is called rounding down)
Examples:
- 3.044 rounded to hundredths is 3.04 (because the next digit, 4, is less than 5).
- 3.045 rounded to hundredths is 3.05 (because the next digit, 5, is 5 or more).
- 3.0447 rounded to hundredths is 3.04 (because the next digit, 4, is less than 5).
For negative numbers, one rounds up as well.
Examples:
- −2.1349 rounded to hundredths is −2.13
- −2.1350 rounded to hundredths is −2.13
- −2.1351 rounded to hundredths is −2.14
"Common method" also sometimes refers to Symmetric Arithmetic Rounding, in which positive and negative numbers round in opposite directions.
Examples:
- 3.044 rounded to hundredths is 3.04 (because the next digit, 4, is less than 5).
- 3.045 rounded to hundredths is 3.05 (because the next digit, 5, is 5 or more).
- 3.0447 rounded to hundredths is 3.04 (because the next digit, 4, is less than 5).
For negative numbers, one rounds down.
Examples:
- −2.1349 rounded to hundredths is −2.13
- −2.1350 rounded to hundredths is −2.14
- −2.1351 rounded to hundredths is −2.14
Round-to-even method
This method, also known as unbiased rounding, convergent rounding, statistician's rounding, Dutch rounding, Gaussian rounding, elitist rounding, or bankers' rounding, exactly replicates the common method of rounding except when the digit(s) following the rounding digit starts with a five and has no non-zero digits after it. The new algorithm becomes:
- Decide which is the last digit to keep.
- Increase it by 1 if the next digit is 6 or more, or a 5 followed by one or more non-zero digits.
- Leave it the same if the next digit is 4 or less
- Otherwise, if all that follows the last digit is a 5 and possibly trailing zeroes; then increase the rounded digit if it is currently odd; else, if it is already even, leave it alone.
All rounding schemes have two possible outcomes: increasing the rounding digit by one or leaving it alone. With traditional rounding, if the number has a value less than the half-way mark between the possible outcomes, it is rounded down; if the number has a value exactly half-way or greater than half-way between the possible outcomes, it is rounded up. The round-to-even method is the same except that numbers exactly half-way between the possible outcomes are sometimes rounded up—sometimes down.
Despite the custom of rounding the number 4.5 up to 5, in fact 4.5 is no nearer to 5 than it is to 4 (it is 0.5 away from both). When dealing with large sets of scientific or statistical data, where trends are important, traditional rounding on average biases the data upwards slightly. Over a large set of data, or when many subsequent rounding operations are performed as in digital signal processing, the round-to-even rule tends to reduce the total rounding error, with (on average) an equal portion of numbers rounding up as rounding down. This generally reduces upwards skewing of the result.
People use round-to-even rather than round-to-odd as it reduces rounding to a final digit of 5, and so reduces the likelihood of error resulting from double rounding.
Examples:
- 3.016 rounded to hundredths is 3.02 (because the next digit (6) is 6 or more)
- 3.013 rounded to hundredths is 3.01 (because the next digit (3) is 4 or less)
- 3.015 rounded to hundredths is 3.02 (because the next digit is 5, and the hundredths digit (1) is odd)
- 3.045 rounded to hundredths is 3.04 (because the next digit is 5, and the hundredths digit (4) is even)
- 3.04501 rounded to hundredths is 3.05 (because the next digit is 5, but it is followed by non-zero digits)
History
The Round-to-even method has served as the ASTM (E-29) standard since 1940. The origin of the terms unbiased rounding and statistician's rounding are fairly self-explanatory. In the 1906 4th edition of Probability and Theory of Errors [1] Robert Woodward called this "the computer's rule" indicating that it was then in common use by human computers who calculated mathematical tables. Churchill Eisenhart's 1947 paper "Effects of Rounding or Grouping Data" (in Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay, and Wallis, editors) indicated that the practice was already "well established" in data analysis.
The origin of the term bankers' rounding remains more obscure. If this rounding method was ever a standard in banking, the evidence has proved extremely difficult to find. To the contrary, section 2 of the European Commission report The Introduction of the Euro and the Rounding of Currency Amounts [2] suggests that there had previously been no standard approach to rounding in banking, and specifies that "half-way" amounts should be rounded up.
Other methods of rounding
Other methods of rounding exist, but operate mostly in computers and calculators, statistics and science. In computers and calculators, these methods are used for one of two reasons: speed of computation or usefulness in certain computer algorithms. In statistics and science, the primary use of alternate rounding schemes is to reduce bias, rounding error and drift—these are similar to round-to-even rounding. They make a statistical or scientific calculation more accurate.
Ease of computation
Other methods of rounding include "round towards zero" (also known as truncation) and "round away from zero". These introduce more round-off error and therefore statistics and science tend to avoid them; they are still used in computer algorithms because they are slightly easier and faster to compute. Two specialized methods used in mathematics and computer science are the floor (always round down to the nearest integer) and ceiling (always round up to the nearest integer).
Statistical accuracy
Stochastic rounding rounds to the nearest integer, but when the two integers are equidistant (e.g., 3.5), then it is rounded up with probability 0.5 and down with probability 0.5. This reduces any drift, but adds randomness to the process. Thus, if you perform a calculation with stochastic rounding twice, you may not end up with the same answer. The motivation is similar to statistician's rounding.
Rounding in an exact computation
People often use rounding to get a number that is easier to use, at the cost of making it less precise. However, for evaluating a function with a discrete domain and range, rounding may be involved in an exact computation, e.g. to find the number of Sundays between two dates, or to compute a Fibonacci number. In such cases the algorithm can typically be set up such that computational rounding errors before the explicit rounding do not affect the outcome of the latter. For example, if an integer divided by 7 is rounded to an integer, a computational rounding error up to 1/14 in the division (which is much more than is possible in typical cases) does not affect the outcome. (It is important that the dividend is an integer and the divisor is an odd integer: small errors can affect the outcome of rounding 1.5/3 or 3/2 to an integer.)
Rounding functions in programming languages
- C
- C99 specifies (in
<math.h>
):round()
: round to nearest integer, halfway away from zerorint()
,nearbyint()
: round according to current floating-point rounding directionceil()
: smallest integral value not less than argument (round up)floor()
: largest integral value not greater than argument (round down)trunc()
,(int)
[1]: round towards zero
- The current floating-point rounding direction may, depending on implementation, be retrieved and set using the
fegetround()
/fesetround()
functions defined in<fenv.h>
; the available directions are specified to be at least those in IEEE 854 (see IEEE 754#Rounding floating-point numbers) which include round-to-even, round-down, round-up, and round-to-zero.
- C99 specifies (in
- Java
Math
andStrictMath
: round-half-up (asymmetric) or round-to-even (Math.rint).[2][3]BigDecimal
: Supports "round up", "round down", "round floor", "round ceiling", "round half up", "round half down", "round half even" and even a "rounding unnecessary" mode. Note, however, that the implementation of round half-up is symmetric, unlike the implementation of round half-up in Java.Math.
- JavaScript:
- Uses Asymmetric Arithmetic Rounding
Math.round(-3.5)
gives −4.
- Common Lisp:
- Uses round-to-even
(round -3.5)
gives −4.
- Pascal:
Round
andRoundTo
(nonstandard) use bankers' roundingStr
(nonstandard),Write
andFloatToStr
(nonstandard) don't use bankers' roundingCeil()
: smallest integral value not less than argument (round up)Floor()
: largest integral value not greater than argument (round down)Trunc()
: round towards zero
- Perl:
printf "%f"
orsprintf "%f"
: use bankers' roundingint
: chops off fractional part, rounding towards zeroPOSIX::ceil
: smallest integral value not less than argument (round up)POSIX::floor
: largest integral value not greater than argument (round down)
- PHP:
round(-3.5)
gives −4.round(8.7352, 3)
gives 8.735.round(4278.5, -2)
gives 4300.
- Python:
- Versions 2.5.x and prior use common rounding for POSITIVE numbers:
round(0.5)
is 1.0. - Note that negative integer division is not rounded towards zero but always rounded down: 7/3=2, −7/3=−3.
- Version 3.0 and transitional versions 2.6.x
round()
function uses round-to-even. - Version 3.0
//
operator rounds down towards -inf, similar to previous versions. - As of version 2.4, Python includes class Decimal in module decimal.
- Class Decimal provides exact numerical representation and several rounding modes.
- Versions 2.5.x and prior use common rounding for POSITIVE numbers:
- SQL:
- Visual Basic for Applications:
- Uses Round-Half-Even (Bankers' Rounding)
? Round(2.5, 0)
gives 2.- http://support.microsoft.com/kb/194983
- Microsoft SQL Server:
- Uses either Symmetric Arithmetic Rounding or Symmetric Round Down (Fix) depending on arguments
- SELECT Round(2.5, 0) gives 3.
- Microsoft Excel:
- Uses Symmetric Arithmetic Rounding
= ROUND(2.5, 0)
gives 3.= ROUND(3.5, 0)
gives 4.= ROUND(-3.5, 0)
gives −4
- Microsoft .NET Framework
- Uses Round-Half-Even by default. Since v2 of the framework Symmetric Arithmetic Rounding is also available and the caller can specify which method to use.[6]
- C#
- C# programs generally use methods of the .NET framework for rounding. (See above.)
- Visual Basic .NET
CType(value, Integer)
uses bankers' rounding. Since this is a .NET language, programs may also use any of the rounding methods of the .NET framework (see above).
- XSLT 1.0:
- Uses round half even
- AppleScript
round
is the rounding function. By default, it rounds to the nearest even number. However, it takes an optional tag that specifies how to round:rounding up
,rounding down
,rounding toward zero
, orrounding as taught in school
(round-half-up).rounding to nearest
is a synonym for the default behavior.
Rounding in meteorology
U.S. Weather Observations
According to the Office of the Federal Coordinator for Meteorology, with the exception of pressure,
If the fractional part of a positive number to be dropped is equal to or greater than one-half, the preceding digit shall be increased by one. If the fractional part of a negative number to be dropped is greater than one-half, the preceding digit shall be decreased by one. In all other cases, the preceding digit shall remain unchanged. For example, 1.5 becomes 2, −1.5 becomes −1, 1.3 becomes 1, and −2.6 becomes −3.[7]
This guideline has been in effect since mid-1996. Prior to that date, if the fraction equal to one half, the value was rounded away from zero. For example, a −1.5 became a −2, and a +1.5 became a +2.
Negative zero in meteorology
Meteorologists may round temperatures between 0.0 and −0.5 degrees (exclusive) to −0 to indicate a temperature which is below zero, but not cold enough to be rounded to −1 or less. It is used especially in the Celsius scale, where below zero indicates freezing. It may be used, for example, to allow tallying of below-zero days.
See also
External links
- An introduction to different rounding algorithms that is accessible to a general audience but especially useful to those studying computer science and electronics.
- A complete treatment of mathematical rounding. by John Kennedy
- How To Implement Custom Rounding Procedures by Microsoft
References
- ^ typecasting to an int returns an int instead of a double unlike the other functions.
- ^ Template:Cite api
- ^ Template:Cite api
- ^
Jones, Arie (2005). SQL Functions Programmer's Reference. Indianapolis, IN: Wiley. p. 127. ISBN 9780764569012.
{{cite book}}
: Cite has empty unknown parameters:|accessyear=
,|origmonth=
,|accessmonth=
,|month=
,|chapterurl=
, and|origdate=
(help); Unknown parameter|coauthors=
ignored (|author=
suggested) (help) - ^
Jones, Arie (2005). SQL Functions Programmer's Reference. Indianapolis, IN: Wiley. p. 127. ISBN 9780764569012.
{{cite book}}
: Cite has empty unknown parameters:|accessyear=
,|origmonth=
,|accessmonth=
,|month=
,|chapterurl=
, and|origdate=
(help); Unknown parameter|coauthors=
ignored (|author=
suggested) (help) - ^ http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
- ^ OFCM, 2005: Federal Meteorological Handbook No. 1, Washington, DC., 104 pp.