Hubbry Logo
search
logo
2257382

Rounding

logo
Community Hub0 Subscribers
Read side by side
from Wikipedia

Graphs of the result, y, of rounding x using different methods. For clarity, the graphs are shown displaced from integer y values. In the SVG file, hover over a method to highlight it and, in SMIL-enabled browsers, click to select or deselect it.

Rounding or rounding off is the process of adjusting a number to an approximate, more convenient value, often with a shorter or simpler representation. For example, replacing $23.4476 with $23.45, the fraction 312/937 with 1/3, or the expression √2 with 1.414.

Rounding is often done to obtain a value that is easier to report and communicate than the original. Rounding can also be important to avoid misleadingly precise reporting of a computed number, measurement, or estimate; for example, a quantity that was computed as 123456 but is known to be accurate only to within a few hundred units is usually better stated as "about 123500".

On the other hand, rounding of exact numbers will introduce some round-off error in the reported result. Rounding is almost unavoidable when reporting many computations – especially when dividing two numbers in integer or fixed-point arithmetic; when computing mathematical functions such as square roots, logarithms, and sines; or when using a floating-point representation with a fixed number of significant digits. In a sequence of calculations, these rounding errors generally accumulate, and in certain ill-conditioned cases they may make the result meaningless.

Accurate rounding of transcendental mathematical functions is difficult because the number of extra digits that need to be calculated to resolve whether to round up or down cannot be known in advance. This problem is known as "the table-maker's dilemma".

Rounding has many similarities to the quantization that occurs when physical quantities must be encoded by numbers or digital signals.

A wavy equals sign (, approximately equal to) is sometimes used to indicate rounding of exact numbers, e.g. 9.98 ≈ 10. This sign was introduced by Alfred George Greenhill in 1892.[1]

Ideal characteristics of rounding methods include:

  1. Rounding should be done by a function. This way, when the same input is rounded in different instances, the output is unchanged.
  2. Calculations done with rounding should be close to those done without rounding.
    • As a result of (1) and (2), the output from rounding should be close to its input, often as close as possible by some metric.
  3. To be considered rounding, the range will be a subset of the domain, often discrete. A classical range is the integers, Z.
  4. Rounding should preserve symmetries that already exist between the domain and range. With finite precision (or a discrete domain), this translates to removing bias.
  5. A rounding method should have utility in computer science or human arithmetic where finite precision is used, and speed is a consideration.

Because it is not usually possible for a method to satisfy all ideal characteristics, many different rounding methods exist.

As a general rule, rounding is idempotent;[2] i.e., once a number has been rounded, rounding it again to the same precision will not change its value. Rounding functions are also monotonic; i.e., rounding two numbers to the same absolute precision will not exchange their order (but may give the same value). In the general case of a discrete range, they are piecewise constant functions.

Types of rounding

[edit]

Typical rounding problems include:

Rounding problem Example input Result Rounding criterion
Approximating an irrational number by a fraction π 22/7 1-digit-denominator
Approximating a rational number by a fraction with smaller denominator 399 / 941 3 / 7 1-digit-denominator
Approximating a fraction by a fractional decimal number 5 / 3 1.6667 4 decimal places
Approximating a fractional decimal number by one with fewer digits 2.1784 2.18 2 decimal places
Approximating a decimal integer by an integer with more trailing zeros 23217 23200 3 significant figures
Approximating a large decimal integer using scientific notation 300999999 3.01 × 108 3 significant figures
Approximating a value by a multiple of a specified amount 48.2 45 Multiple of 15
Approximating each of a finite set of real numbers by an integer so that the sum of the rounded numbers equals the rounded sum of the numbers[nb 1] {0, 0, 1} Sum of rounded elements equals rounded sum of elements

Rounding to integer

[edit]

The most basic form of rounding is to replace an arbitrary number by an integer. All the following rounding modes are concrete implementations of an abstract single-argument "round()" procedure. These are true functions (with the exception of those that use randomness).

Directed rounding to an integer

[edit]

These four methods are called directed rounding to an integer, as the displacements from the original number x to the rounded value y are all directed toward or away from the same limiting value (0, +∞, or −∞). Directed rounding is used in interval arithmetic and is often required in financial calculations.

If x is positive, round-down is the same as round-toward-zero, and round-up is the same as round-away-from-zero. If x is negative, round-down is the same as round-away-from-zero, and round-up is the same as round-toward-zero. In any case, if x is an integer, y is just x.

Where many calculations are done in sequence, the choice of rounding method can have a very significant effect on the result. A famous instance involved a new index set up by the Vancouver Stock Exchange in 1982. It was initially set at 1000.000 (three decimal places of accuracy), and after 22 months had fallen to about 520, although the market appeared to be rising. The problem was caused by the index being recalculated thousands of times daily, and always being truncated (rounded down) to 3 decimal places, in such a way that the rounding errors accumulated. Recalculating the index for the same period using rounding to the nearest thousandth rather than truncation corrected the index value from 524.811 up to 1098.892.[3]

For the examples below, sgn(x) refers to the sign function applied to the original number, x.

Rounding down

[edit]

One may round down (or take the floor, or round toward negative infinity): y is the largest integer that does not exceed x.

For example, 23.7 gets rounded to 23, and −23.2 gets rounded to −24.

Rounding up

[edit]

One may also round up (or take the ceiling, or round toward positive infinity): y is the smallest integer that is not less than x.

For example, 23.2 gets rounded to 24, and −23.7 gets rounded to −23.

Rounding toward zero

[edit]

One may also round toward zero (or truncate, or round away from infinity): y is the integer that is closest to x such that it is between 0 and x (included); i.e. y is the integer part of x, without its fraction digits.

For example, 23.7 gets rounded to 23, and −23.7 gets rounded to −23.

Rounding away from zero

[edit]

One may also round away from zero (or round toward infinity): y is the integer that is closest to 0 (or equivalently, to x) such that x is between 0 and y (included).

For example, 23.2 gets rounded to 24, and −23.2 gets rounded to −24.

Rounding to the nearest integer

[edit]

These six methods are called rounding to the nearest integer. Rounding a number x to the nearest integer requires some tie-breaking rule for those cases when x is exactly half-way between two integers – that is, when the fraction part of x is exactly 0.5.

If it were not for the 0.5 fractional parts, the round-off errors introduced by the round to nearest method would be symmetric: for every fraction that gets rounded down (such as 0.268), there is a complementary fraction (namely, 0.732) that gets rounded up by the same amount.

When rounding a large set of fixed-point numbers with uniformly distributed fractional parts, the rounding errors by all values, with the omission of those having 0.5 fractional part, would statistically compensate each other. This means that the expected (average) value of the rounded numbers is equal to the expected value of the original numbers when numbers with fractional part 0.5 from the set are removed.

In practice, floating-point numbers are typically used, which have even more computational nuances because they are not equally spaced.

Rounding half up

[edit]

One may round half up (or round half toward positive infinity), a tie-breaking rule that is widely used in many disciplines.[citation needed] That is, half-way values of x are always rounded up. If the fractional part of x is exactly 0.5, then y = x + 0.5

For example, 23.5 gets rounded to 24, and −23.5 gets rounded to −23.

Some programming languages (such as Java and Python) use "half up" to refer to round half away from zero rather than round half toward positive infinity.[4][5]

This method only requires checking one digit to determine rounding direction in two's complement and similar representations.

Rounding half down

[edit]

One may also round half down (or round half toward negative infinity) as opposed to the more common round half up. If the fractional part of x is exactly 0.5, then y = x − 0.5

For example, 23.5 gets rounded to 23, and −23.5 gets rounded to −24.

Some programming languages (such as Java and Python) use "half down" to refer to round half toward zero rather than round half toward negative infinity.[4][5]

Rounding half toward zero

[edit]

One may also round half toward zero (or round half away from infinity) as opposed to the conventional round half away from zero. If the fractional part of x is exactly 0.5, then y = x − 0.5 if x is positive, and y = x + 0.5 if x is negative.

For example, 23.5 gets rounded to 23, and −23.5 gets rounded to −23.

This method treats positive and negative values symmetrically, and therefore is free of overall positive/negative bias if the original numbers are positive or negative with equal probability. It does, however, still have bias toward zero.

Rounding half away from zero

[edit]

One may also round half away from zero (or round half toward infinity), a tie-breaking rule that is commonly taught and used, namely: If the fractional part of x is exactly 0.5, then y = x + 0.5 if x is positive, and y = x − 0.5 if x is negative.

For example, 23.5 gets rounded to 24, and −23.5 gets rounded to −24.

This can be more efficient on computers that use sign-magnitude representation for the values to be rounded, because only the first omitted digit needs to be considered to determine if it rounds up or down. This is one method used when rounding to significant figures due to its simplicity.

This method, also known as commercial rounding,[citation needed] treats positive and negative values symmetrically, and therefore is free of overall positive/negative bias if the original numbers are positive or negative with equal probability. It does, however, still have bias away from zero.

It is often used for currency conversions and price roundings (when the amount is first converted into the smallest significant subdivision of the currency, such as cents of a euro) as it is easy to explain by just considering the first fractional digit, independently of supplementary precision digits or sign of the amount (for strict equivalence between the paying and recipient of the amount).

Rounding half to even

[edit]

One may also round half to even, a tie-breaking rule without positive/negative bias and without bias toward/away from zero. By this convention, if the fractional part of x is 0.5, then y is the even integer nearest to x. Thus, for example, 23.5 becomes 24, as does 24.5; however, −23.5 becomes −24, as does −24.5. This function minimizes the expected error when summing over rounded figures, even when the inputs are mostly positive or mostly negative, provided they are neither mostly even nor mostly odd.

This variant of the round-to-nearest method is also called convergent rounding, statistician's rounding, Dutch rounding, Gaussian rounding, odd–even rounding,[6] or bankers' rounding.[7]

This is the default rounding mode used in IEEE 754 operations for results in binary floating-point formats.

By eliminating bias, repeated addition or subtraction of independent numbers, as in a one-dimensional random walk, will give a rounded result with an error that tends to grow in proportion to the square root of the number of operations rather than linearly.

However, this rule distorts the distribution by increasing the probability of evens relative to odds. That is why this rule is for situations where sums are more important than distribution.[clarification needed]

Rounding half to odd

[edit]

One may also round half to odd, a similar tie-breaking rule to round half to even. In this approach, if the fractional part of x is 0.5, then y is the odd integer nearest to x. Thus, for example, 23.5 becomes 23, as does 22.5; while −23.5 becomes −23, as does −22.5.

This method is also free from positive/negative bias and bias toward/away from zero, provided the numbers to be rounded are neither mostly even nor mostly odd. It also shares the round half to even property of distorting the original distribution, as it increases the probability of odds relative to evens. It was the method used for bank balances in the United Kingdom when it decimalized its currency[8][clarification needed].

This variant is almost never used in computations, except in situations where one wants to avoid increasing the scale of floating-point numbers, which have a limited exponent range. With round half to even, a non-infinite number would round to infinity, and a small denormal value would round to a normal non-zero value. Effectively, this mode prefers preserving the existing scale of tie numbers, avoiding out-of-range results when possible for numeral systems of even radix (such as binary and decimal).[clarification needed (see talk)].

Rounding to prepare for shorter precision

[edit]

This rounding mode is used to avoid getting a potentially wrong result after multiple roundings. This can be achieved if all roundings except the final one are done using rounding to prepare for shorter precision ("RPSP"), and only the final rounding uses the externally requested mode.

With decimal arithmetic, final digits of 0 and 5 are avoided; if there is a choice between numbers with the least significant digit 0 or 1, 4 or 5, 5 or 6, 9 or 0, then the digit different from 0 or 5 shall be selected; otherwise, the choice is arbitrary. IBM defines that, in the latter case, a digit with the smaller magnitude shall be selected.[9] RPSP can be applied with the step between two consequent roundings as small as a single digit (for example, rounding to 1/10 can be applied after rounding to 1/100). For example, when rounding to integer,

  • 20.0 is rounded to 20;
  • 20.01, 20.1, 20.9, 20.99, 21, 21.01, 21.9, 21.99 are rounded to 21 (avoiding a final 0);
  • 22.0, 22.1, 22.9, 22.99 are rounded to 22;
  • 24.0, 24.1, 24.9, 24.99 are rounded to 24 (avoiding a final 5);
  • 25.0 is rounded to 25;
  • 25.01, 25.1 are rounded to 26 (avoiding a final 5).

In the example from "Double rounding" section, rounding 9.46 to one decimal gives 9.4, which rounding to integer in turn gives 9.

With binary arithmetic, this rounding is also called "round to odd" (not to be confused with "round half to odd"). For example, when rounding to 1/4 (0.01 in binary),

  • x = 2.0 ⇒ result is 2 (10.00 in binary)
  • 2.0 < x < 2.5 ⇒ result is 2.25 (10.01 in binary)
  • x = 2.5 ⇒ result is 2.5 (10.10 in binary)
  • 2.5 < x < 3.0 ⇒ result is 2.75 (10.11 in binary)
  • x = 3.0 ⇒ result is 3 (11.00 in binary)

For correct results with binary arithmetic, each rounding step must remove at least 2 binary digits, otherwise, wrong results may appear. For example,

  • 3.125 RPSP to 1/4 ⇒ result is 3.25
  • 3.25 RPSP to 1/2 ⇒ result is 3.5
  • 3.5 round-half-to-even to 1 ⇒ result is 4 (wrong)

If the erroneous middle step is removed, the final rounding to integer rounds 3.25 to the correct value of 3.

RPSP is implemented in hardware in IBM zSeries and pSeries. In Python module "Decimal", Tcl module "math", Haskell package "decimal-arithmetic", and possibly others, this mode is called ROUND_05UP or round05up.

Randomized rounding to an integer

[edit]

Alternating tie-breaking

[edit]

One method, more obscure than most, is to alternate direction when rounding a number with 0.5 fractional part. All others are rounded to the closest integer. Whenever the fractional part is 0.5, alternate rounding up or down: for the first occurrence of a 0.5 fractional part, round up, for the second occurrence, round down, and so on. Alternatively, the first 0.5 fractional part rounding can be determined by a random seed. "Up" and "down" can be any two rounding methods that oppose each other - toward and away from positive infinity or toward and away from zero.

If occurrences of 0.5 fractional parts occur significantly more than a restart of the occurrence "counting", then it is effectively bias free. With guaranteed zero bias, it is useful if the numbers are to be summed or averaged.

Random tie-breaking

[edit]

If the fractional part of x is 0.5, choose y randomly between x + 0.5 and x − 0.5, with equal probability. All others are rounded to the closest integer.

Like round-half-to-even and round-half-to-odd, this rule is essentially free of overall bias, but it is also fair among even and odd y values. An advantage over alternate tie-breaking is that the last direction of rounding on the 0.5 fractional part does not have to be "remembered".

Stochastic rounding

[edit]

Rounding as follows to one of the closest integer toward negative infinity and the closest integer toward positive infinity, with a probability dependent on the proximity is called stochastic rounding and will give an unbiased result on average.[10]

For example, 1.6 would be rounded to 1 with probability 0.4 and to 2 with probability 0.6.

Stochastic rounding can be accurate in a way that a rounding function can never be. For example, suppose one started with 0 and added 0.3 to that one hundred times while rounding the running total between every addition. The result would be 0 with regular rounding, but with stochastic rounding, the expected result would be 30, which is the same value obtained without rounding. This can be useful in machine learning where the training may use low precision arithmetic iteratively.[10] Stochastic rounding is also a way to achieve 1-dimensional dithering.

Comparison of approaches for rounding to an integer

[edit]
Value Functional methods Randomized methods
Directed rounding Round to nearest Round to prepare for shorter precision Alternating tie-break Random tie-break Stochastic
Down
(toward −)
Up
(toward +)
Toward 0 Away From 0 Half Down
(toward −)
Half Up
(toward +)
Half Toward 0 Half Away From 0 Half to Even Half to Odd Average SD Average SD Average SD
+2.8 +2 +3 +2 +3 +3 +3 +3 +3 +3 +3 +2 +3 0 +3 0 +2.8 0.04
+2.5 +2 +2 +2 +2.505 0 +2.5 0.05 +2.5 0.05
+2.2 +2 +2 +2 +2 0 +2 0 +2.2 0.04
+1.8 +1 +2 +1 +2 +1 +1.8 0.04
+1.5 +1 +1 +1 +1.505 0 +1.5 0.05 +1.5 0.05
+1.2 +1 +1 +1 +1 0 +1 0 +1.2 0.04
+0.8 0 +1 0 +1 +0.8 0.04
+0.5 0 0 0 +0.505 0 +0.5 0.05 +0.5 0.05
+0.2 0 0 0 0 0 0 0 +0.2 0.04
−0.2 −1 0 −1 −1 −0.2 0.04
−0.5 −1 −1 −1 −0.495 0 −0.5 0.05 −0.5 0.05
−0.8 −1 −1 −1 −1 0 −1 0 −0.8 0.04
−1.2 −2 −1 −1 −2 −1.2 0.04
−1.5 −2 −2 −2 −1.495 0 −1.5 0.05 −1.5 0.05
−1.8 −2 -2 −2 −2 0 −2 0 −1.8 0.04
−2.2 −3 −2 −2 −3 −2 −2.2 0.04
−2.5 −3 −3 −3 −2.495 0 −2.5 0.05 −2.5 0.05
−2.8 −3 −3 −3 −3 0 −3 0 −2.8 0.04

Rounding to other values

[edit]

Rounding to a specified multiple

[edit]

The most common type of rounding is to round to an integer; or, more generally, to an integer multiple of some increment – such as rounding to whole tenths of seconds, hundredths of a dollar, to whole multiples of 1/2 or 1/8 inch, to whole dozens or thousands, etc.

In general, rounding a number x to a multiple of some specified positive value m entails the following steps:

For example, rounding x = 2.1784 dollars to whole cents (i.e., to a multiple of 0.01) entails computing 2.1784 / 0.01 = 217.84, then rounding that to 218, and finally computing 218 × 0.01 = 2.18.

When rounding to a predetermined number of significant digits, the increment m depends on the magnitude of the number to be rounded (or of the rounded result).

The increment m is normally a finite fraction in whatever numeral system is used to represent the numbers. For display to humans, that usually means the decimal numeral system (that is, m is an integer times a power of 10, like 1/1000 or 25/100). For intermediate values stored in digital computers, it often means the binary numeral system (m is an integer times a power of 2).

The abstract single-argument "round()" function that returns an integer from an arbitrary real value has at least a dozen distinct concrete definitions presented in the rounding to integer section. The abstract two-argument "roundToMultiple()" function is formally defined here, but in many cases it is used with the implicit value m = 1 for the increment and then reduces to the equivalent abstract single-argument function, with also the same dozen distinct concrete definitions.

Logarithmic rounding

[edit]

Rounding to a specified power

[edit]

Rounding to a specified power is very different from rounding to a specified multiple; for example, it is common in computing to need to round a number to a whole power of 2. The steps, in general, to round a positive number x to a power of some positive number b other than 1, are:

Many of the caveats applicable to rounding to a multiple are applicable to rounding to a power.

In the chromatic "twelve-tone" scale of music, 32 is rounded to 27/12 (a fifth), 43 is rounded to 25/12 (a fourth), 54 is rounded to 24/12 (a major third), 65 is rounded to 23/12 (a minor third), and 98 is rounded to 22/12 (a diminished third).

Scaled rounding

[edit]

This type of rounding, which is also named rounding to a logarithmic scale, is a variant of rounding to a specified power. Rounding on a logarithmic scale is accomplished by taking the log of the amount and doing normal rounding to the nearest value on the log scale.

For example, resistors are supplied with preferred numbers on a logarithmic scale. In particular, for resistors with a 10% accuracy, they are supplied with nominal values 100, 120, 150, 180, 220, etc. rounded to multiples of 10 (E12 series). If a calculation indicates a resistor of 165 ohms is required then log(150) = 2.176, log(165) = 2.217 and log(180) = 2.255. The logarithm of 165 is closer to the logarithm of 180 therefore a 180 ohm resistor would be the first choice if there are no other considerations.

Whether a value x ∈ (a, b) rounds to a or b depends upon whether the squared value x2 is greater than or less than the product ab. The value 165 rounds to 180 in the resistors example because 1652 = 27225 is greater than 150 × 180 = 27000.

Floating-point rounding

[edit]

In floating-point arithmetic, rounding aims to turn a given value x into a value y with a specified number of significant digits. In other words, y should be a multiple of a number m that depends on the magnitude of x. The number m is a power of the base (usually 2 or 10) of the floating-point representation.

Apart from this detail, all the variants of rounding discussed above apply to the rounding of floating-point numbers as well. The algorithm for such rounding is presented in the Scaled rounding section above, but with a constant scaling factor s = 1, and an integer base b > 1.

Where the rounded result would overflow the result for a directed rounding is either the appropriate signed infinity when "rounding away from zero", or the highest representable positive finite number (or the lowest representable negative finite number if x is negative), when "rounding toward zero". The result of an overflow for the usual case of round to nearest is always the appropriate infinity.

Rounding to a simple fraction

[edit]

In some contexts it is desirable to round a given number x to a "neat" fraction – that is, the nearest fraction y = m/n whose numerator m and denominator n do not exceed a given maximum. This problem is fairly distinct from that of rounding a value to a fixed number of decimal or binary digits, or to a multiple of a given unit m. This problem is related to Farey sequences, the Stern–Brocot tree, and continued fractions.

Rounding to an available value

[edit]

Finished lumber, writing paper, electronic components, and many other products are usually sold in only a few standard values.

Many design procedures describe how to calculate an approximate value, and then "round" to some standard size using phrases such as "round down to nearest standard value", "round up to nearest standard value", or "round to nearest standard value".[11][12]

When a set of preferred values is equally spaced on a logarithmic scale, choosing the closest preferred value to any given value can be seen as a form of scaled rounding. Such rounded values can be directly calculated.[13]

Arbitrary bins

[edit]

More general rounding rules can separate values at arbitrary break points, used for example in data binning. A related mathematically formalized tool is signpost sequences, which use notions of distance other than the simple difference – for example, a sequence may round to the integer with the smallest relative (percent) error.

Rounding in other contexts

[edit]

Dithering and error diffusion

[edit]

When digitizing continuous signals, such as sound waves, the overall effect of a number of measurements is more important than the accuracy of each individual measurement. In these circumstances, dithering, and a related technique, error diffusion, are normally used. A related technique called pulse-width modulation is used to achieve analog type output from an inertial device by rapidly pulsing the power with a variable duty cycle. Delta-sigma modulation is commonly used for converting between real-world signals and digital signals, which allows control of the frequency statistics of Quantization_(signal_processing).

Error diffusion tries to ensure the error, on average, is minimized. When dealing with a gentle slope from one to zero, the output would be zero for the first few terms until the sum of the error and the current value becomes greater than 0.5, in which case a 1 is output and the difference subtracted from the error so far. Floyd–Steinberg dithering is a popular error diffusion procedure when digitizing images.

As a one-dimensional example, suppose the numbers 0.9677, 0.9204, 0.7451, and 0.3091 occur in order and each is to be rounded to a multiple of 0.01. In this case the cumulative sums, 0.9677, 1.8881 = 0.9677 + 0.9204, 2.6332 = 0.9677 + 0.9204 + 0.7451, and 2.9423 = 0.9677 + 0.9204 + 0.7451 + 0.3091, are each rounded to a multiple of 0.01: 0.97, 1.89, 2.63, and 2.94. The first of these and the differences of adjacent values give the desired rounded values: 0.97, 0.92 = 1.89 − 0.97, 0.74 = 2.63 − 1.89, and 0.31 = 2.94 − 2.63.

Monte Carlo arithmetic

[edit]

Monte Carlo arithmetic is a technique in Monte Carlo methods where the rounding is randomly up or down. Stochastic rounding can be used for Monte Carlo arithmetic, but in general, just rounding up or down with equal probability is more often used. Repeated runs will give a random distribution of results which can indicate the stability of the computation.[14]

Exact computation with rounded arithmetic

[edit]

It is possible to use rounded arithmetic to evaluate the exact value of a function with integer domain and range. For example, if an integer n is known to be a perfect square, its square root can be computed by converting n to a floating-point value z, computing the approximate square root x of z with floating point, and then rounding x to the nearest integer y. If n is not too big, the floating-point round-off error in x will be less than 0.5, so the rounded value y will be the exact square root of n. This is essentially why slide rules could be used for exact arithmetic.

Double rounding

[edit]

Rounding a number twice in succession to different levels of precision, with the latter precision being coarser, is not guaranteed to give the same result as rounding once to the final precision except in the case of directed rounding.[nb 2] For instance rounding 9.46 to one decimal gives 9.5, and then 10 when rounding to integer using rounding half to even, but would give 9 when rounded to integer directly. Borman and Chatfield[15] discuss the implications of double rounding when comparing data rounded to one decimal place to specification limits expressed using integers.

In Martinez v. Allstate and Sendejo v. Farmers, litigated between 1995 and 1997, the insurance companies argued that double rounding premiums was permissible and in fact required. The US courts ruled against the insurance companies and ordered them to adopt rules to ensure single rounding.[16]

Some computer languages and the IEEE 754-2008 standard dictate that in straightforward calculations the result should not be rounded twice. This has been a particular problem with Java as it is designed to be run identically on different machines, special programming tricks have had to be used to achieve this with x87 floating point.[17][18] The Java language was changed to allow different results where the difference does not matter and require a strictfp qualifier to be used when the results have to conform accurately; strict floating point has been restored in Java 17.[19]

In some algorithms, an intermediate result is computed in a larger precision, then must be rounded to the final precision. Double rounding can be avoided by choosing an adequate rounding for the intermediate computation. This consists in avoiding to round to midpoints for the final rounding (except when the midpoint is exact). In binary arithmetic, the idea is to round the result toward zero, and set the least significant bit to 1 if the rounded result is inexact; this rounding is called sticky rounding.[20] Equivalently, it consists in returning the intermediate result when it is exactly representable, and the nearest floating-point number with an odd significand otherwise; this is why it is also known as rounding to odd.[21][22] A concrete implementation of this approach, for binary and decimal arithmetic, is implemented as Rounding to prepare for shorter precision.

Table-maker's dilemma

[edit]

William M. Kahan coined the term "The Table-Maker's Dilemma" for the unknown cost of rounding transcendental functions:

Nobody knows how much it would cost to compute yw correctly rounded for every two floating-point arguments at which it does not over/underflow. Instead, reputable math libraries compute elementary transcendental functions mostly within slightly more than half an ulp and almost always well within one ulp. Why can't yw be rounded within half an ulp like SQRT? Because nobody knows how much computation it would cost... No general way exists to predict how many extra digits will have to be carried to compute a transcendental expression and round it correctly to some preassigned number of digits. Even the fact (if true) that a finite number of extra digits will ultimately suffice may be a deep theorem.[23]

The IEEE 754 floating-point standard guarantees that add, subtract, multiply, divide, fused multiply–add, square root, and floating-point remainder will give the correctly rounded result of the infinite-precision operation. No such guarantee was given in the 1985 standard for more complex functions and they are typically only accurate to within the last bit at best. However, the 2008 standard guarantees that conforming implementations will give correctly rounded results which respect the active rounding mode; implementation of the functions, however, is optional.

Using the Gelfond–Schneider theorem and Lindemann–Weierstrass theorem, many of the standard elementary functions can be proved to return transcendental results, except on some well-known arguments; therefore, from a theoretical point of view, it is always possible to correctly round such functions. However, for an implementation of such a function, determining a limit for a given precision on how accurate results need to be computed, before a correctly rounded result can be guaranteed, may demand a lot of computation time or may be out of reach.[24] In practice, when this limit is not known (or only a very large bound is known), some decision has to be made in the implementation (see below); but according to a probabilistic model, correct rounding can be satisfied with a very high probability when using an intermediate accuracy of up to twice the number of digits of the target format plus some small constant (after taking special cases into account).

Some programming packages offer correct rounding. The GNU MPFR package gives correctly rounded arbitrary precision results. Some other libraries implement elementary functions with correct rounding in IEEE 754 double precision (binary64):

  • IBM's ml4j, which stands for Mathematical Library for Java, written by Abraham Ziv and Moshe Olshansky in 1999, correctly rounded to nearest only.[25][26] This library was claimed to be portable, but only binaries for PowerPC/AIX, SPARC/Solaris and x86/Windows NT were provided. According to its documentation, this library uses a first step with an accuracy a bit larger than double precision, a second step based on double-double arithmetic, and a third step with a 768-bit precision based on arrays of IEEE 754 double-precision floating-point numbers.
  • IBM's Accurate portable mathematical library (abbreviated as APMathLib or just MathLib),[27][28] also called libultim,[29] in rounding to nearest only. This library uses up to 768 bits of working precision. It was included in the GNU C Library in 2001,[30] but the "slow paths" (providing correct rounding) were removed from 2018 to 2021.
  • CRlibm, written in the old Arénaire team (LIP, ENS Lyon), first distributed in 2003.[31] It supports the 4 rounding modes and is proved, using the knowledge of the hardest-to-round cases.[32][33] More efficient than IBM MathLib.[34] Succeeded by Metalibm (2014), which automates the formal proofs.[35]
  • Sun Microsystems's libmcr of 2004, in the 4 rounding modes.[36][37] For the difficult cases, this library also uses multiple precision, and the number of words is increased by 2 each time the Table-maker's dilemma occurs (with undefined behavior in the very unlikely event that some limit of the machine is reached).
  • The CORE-MATH project (2022) provides some correctly rounded functions in the 4 rounding modes for x86-64 processors. Proved using the knowledge of the hardest-to-round cases.[38][34]
  • LLVM libc provides some correctly rounded functions in the 4 rounding modes.[39]

There exist computable numbers for which a rounded value can never be determined no matter how many digits are calculated. Specific instances cannot be given but this follows from the undecidability of the halting problem. For instance, if Goldbach's conjecture is true but unprovable, then the result of rounding the following value, n, up to the next integer cannot be determined: either n=1+10k where k is the first even number greater than 4 which is not the sum of two primes, or n=1 if there is no such number. The rounded result is 2 if such a number k exists and 1 otherwise. The value before rounding can however be approximated to any given precision even if the conjecture is unprovable.

Interaction with string searches

[edit]

Rounding can adversely affect a string search for a number. For example, π rounded to four digits is "3.1416" but a simple search for this string will not discover "3.14159" or any other value of π rounded to more than four digits. In contrast, truncation does not suffer from this problem; for example, a simple string search for "3.1415", which is π truncated to four digits, will discover values of π truncated to more than four digits.

History

[edit]

The concept of rounding is very old, perhaps older than the concept of division itself. Some ancient clay tablets found in Mesopotamia contain tables with rounded values of reciprocals and square roots in base 60.[40] Rounded approximations to π, the length of the year, and the length of the month are also ancient – see base 60 examples.

The round-half-to-even method has served as American Standard Z25.1 and ASTM standard E-29 since 1940.[41] The origin of the terms unbiased rounding and statistician's rounding are fairly self-explanatory. In the 1906 fourth edition of Probability and Theory of Errors Robert Simpson Woodward called this "the computer's rule",[42] indicating that it was then in common use by human computers who calculated mathematical tables. For example, it was recommended in Simon Newcomb's c. 1882 book Logarithmic and Other Mathematical Tables.[43] Lucius Tuttle's 1916 Theory of Measurements called it a "universally adopted rule" for recording physical measurements.[44] Churchill Eisenhart indicated the practice was already "well established" in data analysis by the 1940s.[45]

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[46] suggests that there had previously been no standard approach to rounding in banking; and it specifies that "half-way" amounts should be rounded up.

Until the 1980s, the rounding method used in floating-point computer arithmetic was usually fixed by the hardware, poorly documented, inconsistent, and different for each brand and model of computer. This situation changed after the IEEE 754 floating-point standard was adopted by most computer manufacturers. The standard allows the user to choose among several rounding modes, and in each case specifies precisely how the results should be rounded. These features made numerical computations more predictable and machine-independent, and made possible the efficient and consistent implementation of interval arithmetic.

Currently, much research tends to round to multiples of 5 or 2. For example, Jörg Baten used age heaping in many studies, to evaluate the numeracy level of ancient populations. He came up with the ABCC Index, which enables the comparison of the numeracy among regions possible without any historical sources where the population literacy was measured.[47]

Rounding functions in programming languages

[edit]

Most programming languages provide functions or special syntax to round fractional numbers in various ways. The earliest numeric languages, such as Fortran and C, would provide only one method, usually truncation (toward zero). This default method could be implied in certain contexts, such as when assigning a fractional number to an integer variable, or using a fractional number as an index of an array. Other kinds of rounding had to be programmed explicitly; for example, rounding a positive number to the nearest integer could be implemented by adding 0.5 and truncating.

In the last decades, however, the syntax and the standard libraries of most languages have commonly provided at least the four basic rounding functions (up, down, to nearest, and toward zero). The tie-breaking method can vary depending on the language and version or might be selectable by the programmer. Several languages follow the lead of the IEEE 754 floating-point standard, and define these functions as taking a double-precision float argument and returning the result of the same type, which then may be converted to an integer if necessary. This approach may avoid spurious overflows because floating-point types have a larger range than integer types. Some languages, such as PHP, provide functions that round a value to a specified number of decimal digits (e.g., from 4321.5678 to 4321.57 or 4300). In addition, many languages provide a printf or similar string formatting function, which allows one to convert a fractional number to a string, rounded to a user-specified number of decimal places (the precision). On the other hand, truncation (round to zero) is still the default rounding method used by many languages, especially for the division of two integer values.

In contrast, CSS and SVG do not define any specific maximum precision for numbers and measurements, which they treat and expose in their DOM and in their IDL interface as strings as if they had infinite precision, and do not discriminate between integers and floating-point values; however, the implementations of these languages will typically convert these numbers into IEEE 754 double-precision floating-point values before exposing the computed digits with a limited precision (notably within standard JavaScript or ECMAScript[48] interface bindings).

Other rounding standards

[edit]

Some disciplines or institutions have issued standards or directives for rounding.

US weather observations

[edit]

In a guideline issued in mid-1966,[49] the U.S. Office of the Federal Coordinator for Meteorology determined that weather data should be rounded to the nearest round number, with the "round half up" tie-breaking rule. For example, 1.5 rounded to integer should become 2, and −1.5 should become −1. Prior to that date, the tie-breaking rule was "round half away from zero".

Negative zero in meteorology

[edit]

Some meteorologists may write "−0" to indicate a temperature between 0.0 and −0.5 degrees (exclusive) that was rounded to an integer. This notation is used when the negative sign is considered important, no matter how small is the magnitude; for example, when rounding temperatures in the Celsius scale, where below zero indicates freezing.[citation needed]

See also

[edit]

Notes

[edit]

References

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
Rounding is the process of approximating a numerical quantity to a simpler value, typically by adjusting it to the nearest multiple of a specified unit such as a power of 10 or a certain number of decimal places, for convenience in calculations or representation.[1] This approximation introduces a small error known as roundoff error, which becomes particularly significant in extended numerical computations or when operations involve small denominators.[1] In mathematics and related fields, rounding is essential for simplifying complex numbers, estimating results, and managing precision in data presentation.[2] Common techniques include rounding to a fixed number of decimal places or significant figures, where the digit immediately following the rounding position determines whether to increase the last retained digit. For instance, one common rule is that if the digit to be dropped is 5 or greater, the preceding digit is incremented; otherwise, it remains unchanged (though conventions vary for exactly 5).[2] Drastic deviations from these rules—for example, rounding 1.25 to 2.58 instead of to 1.3 (one decimal place) or 1 (nearest integer)—are not standard mathematical practices, lack support from authoritative sources or reliable explanations, appear uncommon, and are likely attributable to isolated calculation errors or misapplication of rounding rules rather than any legitimate technique. Advanced applications, such as in floating-point arithmetic, employ specific rounding modes defined by standards like IEEE 754, including round to nearest (with ties to even), round toward zero, and directed roundings toward positive or negative infinity.[3] These modes ensure consistent behavior in computational systems, minimizing bias in iterative algorithms and scientific simulations.[4] Rounding also plays a critical role in statistics, where rules such as summing unrounded components before rounding the total help avoid distortion in aggregated results.[5]

Fundamentals

Definition and Purpose

Rounding is the process of approximating a numerical value by reducing the number of digits it contains, typically by selecting the closest value from a predefined discrete set, such as multiples of a power of ten or a specified precision level.[6] This technique replaces the original number with a simpler form that maintains proximity to the true value, though it inherently introduces a small degree of inaccuracy.[7] The primary purpose of rounding is to facilitate practical applications across various domains by balancing simplicity and utility. In numerical computation, it enables the representation of real numbers within constrained storage formats, such as fixed-width integers or floating-point registers, which cannot accommodate infinite precision.[8] For instance, computers use rounding to conform to standards like IEEE 754, ensuring operations produce results that are as close as possible to exact values given hardware limitations.[9] In measurement and scientific reporting, rounding aligns values with the appropriate number of significant figures, reflecting the inherent uncertainty of instruments and avoiding overstatement of precision.[10] Everyday uses include financial transactions, such as rounding currency amounts to the nearest cent, which streamlines calculations and aligns with monetary denominations.[11] A basic example illustrates this: the value 3.14159 rounded to one decimal place becomes 3.1, discarding the trailing digits while preserving the essential magnitude.[12] This process motivates consideration of error types, where absolute error measures the direct difference between the original and rounded value (e.g., |3.14159 - 3.1| = 0.04159), and relative error normalizes it by the original magnitude (e.g., 0.04159 / 3.14159 ≈ 0.013), highlighting the proportional impact especially for small numbers.[13] Such errors underscore rounding's trade-off between convenience and fidelity, with specific methods like round half up—where values exactly halfway round away from zero—applied contextually to minimize bias.[14]

Rounding Error and Precision

In numerical computations, two primary types of errors arise from approximating real numbers: truncation error and rounding error. Truncation error, often resulting from chopping or directed truncation of digits, introduces a systematic bias, typically towards zero, where the absolute error is bounded by the unit in the last place (ulp) but always non-negative for positive numbers.[15] In contrast, rounding error, which rounds to the nearest representable value, produces an unbiased error with bounds symmetric around zero, limiting the maximum absolute error to half the ulp.[15] This distinction is critical because truncation can accumulate bias over multiple operations, while rounding to nearest minimizes long-term drift in statistical or iterative processes.[16] The maximum absolute error from rounding a real number to nn decimal places is 0.5×10n\leq 0.5 \times 10^{-n}, as the deviation cannot exceed half the spacing between representable values at that precision.[17] For instance, rounding π3.1415926535\pi \approx 3.1415926535 to two decimal places yields 3.14, introducing an absolute error of approximately 0.00159. The relative error, calculated as the absolute error divided by the true value, is about 0.000506, illustrating how rounding affects proportional accuracy. Relative precision is further quantified through significant figures, where rounding to kk significant figures preserves relative accuracy to roughly 5×10k5 \times 10^{-k}, ensuring the leading digits reflect the measurement's reliability without implying undue certainty in trailing digits.[18] This approach balances precision loss by focusing on the most meaningful digits, though excessive rounding can degrade the number of reliable significant figures in subsequent calculations. In floating-point systems, such as IEEE 754, the unit roundoff uu defines the fundamental relative precision limit, given by u=2pu = 2^{-p} for a pp-bit mantissa (e.g., u1.11×1016u \approx 1.11 \times 10^{-16} for double precision with p=53p = 53).[16] This uu bounds the relative rounding error in representation and arithmetic operations, where the computed result fl(x)\mathrm{fl}(x) satisfies fl(x)xux|\mathrm{fl}(x) - x| \leq u |x|. Directed rounding modes, like rounding toward zero, deviate from this by introducing bias similar to truncation, potentially amplifying errors in magnitude-dependent computations.[16]

Rounding to Integers

Directed Rounding

Directed rounding refers to a class of rounding operations in which the result is systematically biased toward a fixed direction—either toward positive or negative infinity, or toward or away from zero—regardless of the input value's proximity to the rounding boundaries. These modes, also known as directed rounding modes in floating-point arithmetic standards, prioritize directional consistency over minimizing error magnitude and are essential for applications demanding predictable bias, such as bounding computations or hardware implementations.[19] The floor function, denoted x\lfloor x \rfloor, performs rounding down by selecting the greatest integer less than or equal to xx, always directing toward negative infinity. This operation yields 3.7=3\lfloor 3.7 \rfloor = 3 for positive values and 3.7=4\lfloor -3.7 \rfloor = -4 for negative values, ensuring the result never exceeds the input.[20] Conversely, the ceiling function, denoted x\lceil x \rceil, rounds up to the smallest integer greater than or equal to xx, directing toward positive infinity. Examples include 3.7=4\lceil 3.7 \rceil = 4 and 3.7=3\lceil -3.7 \rceil = -3, where the result is always at least as large as the input. Rounding toward zero, often called truncation, produces an integer whose absolute value is no greater than that of xx, effectively discarding the fractional part while biasing toward the origin. For instance, trunc(3.7)=3\operatorname{trunc}(3.7) = 3 and trunc(3.7)=3\operatorname{trunc}(-3.7) = -3.[21] In contrast, rounding away from zero increases the absolute value for non-integer inputs, acting as the opposite of truncation; thus, away(3.7)=4\operatorname{away}(3.7) = 4 and away(3.7)=4\operatorname{away}(-3.7) = -4. This mode increments digits away from the origin unless the fractional part is zero. These directed modes find key applications in specialized domains. Floor and ceiling functions are integral to interval arithmetic, where floor computes the lower bound and ceiling the upper bound of result intervals to guarantee enclosure of the exact value despite rounding uncertainties.[22] Truncation toward zero is the default behavior in integer division across many programming languages, simplifying quotient computation by discarding remainders without directional ambiguity for positive operands.[23] Unlike nearest-integer methods, which aim for minimal bias by selecting the closest representable value, directed rounding enforces a uniform directional shift, making it suitable for conservative error propagation but introducing predictable systematic errors.[19]

Nearest Integer Rounding

Nearest integer rounding selects the integer closest to a given real number xx, minimizing the absolute distance xn|x - n| where nn is an integer. This method differs from directed rounding by prioritizing proximity rather than a fixed direction, but it requires explicit tie-breaking rules when xx is exactly halfway between two integers (i.e., the fractional part is 0.5).[24] The most common tie-breaking rule is round half up, also known as arithmetic rounding, which rounds halfway cases away from zero. For example, 2.5 rounds to 3 and -2.5 rounds to -3. This approach is prevalent in educational settings and basic computational tools due to its simplicity. For positive numbers, it can be implemented using the formula x+0.5\lfloor x + 0.5 \rfloor.[25][26] Round half down, by contrast, rounds halfway cases toward zero: 2.5 to 2 and -2.5 to -2. This preserves the magnitude less aggressively than half up and is sometimes used in contexts requiring conservative adjustments.[24] Round half away from zero explicitly directs ties away from zero regardless of sign, aligning with half up for positives but ensuring consistency: 2.5 to 3 and -2.5 to -3. It is optional in the IEEE 754 standard for certain operations. Round half toward zero mirrors half down, rounding ties to the nearer integer closer to zero for consistency across signs.[24] A statistically unbiased alternative is round half to even (bankers' rounding), which resolves ties by selecting the even integer. Examples include 2.5 to 2, 3.5 to 4, and 4.5 to 4. This method reduces average rounding bias over multiple operations, making it the default mode in the IEEE 754 floating-point standard for binary and decimal arithmetic. It is particularly valuable in financial and scientific computing to avoid systematic errors in summations or averages. Round half to odd, though less common, rounds halfway cases to the nearest odd integer: 2.5 to 3, 3.5 to 3, and 4.5 to 5. This variant can balance errors in specific applications where even parity is undesirable, but it sees limited adoption compared to half to even.[27]

Preparatory and Randomized Rounding

Preparatory rounding techniques adjust numerical values prior to truncation or reduction in precision to minimize accumulated errors in computations. One common method involves the use of guard digits, where extra digits are retained during intermediate calculations to preserve information that might otherwise be lost in subtraction or multiplication operations, followed by rounding to the target precision. This approach reduces roundoff errors compared to direct truncation, as demonstrated in analyses of floating-point arithmetic where guard digits ensure that operations like addition yield results bounded by machine epsilon.[16] Randomized rounding methods introduce controlled randomness during the rounding process to integer values, particularly at decision boundaries like ties, thereby averaging out systematic biases over multiple operations and improving long-term accuracy in iterative or parallel computations. These techniques contrast with deterministic rounding by distributing rounding errors randomly, which prevents error accumulation in one direction and maintains unbiased expectations.[28] Alternating tie-breaking is a deterministic variant that cycles between rounding up and down when the fractional part is exactly 0.5, such as alternating half-up and half-down to balance biases without requiring random number generation.[24] Random tie-breaking employs a probabilistic choice specifically at halfway cases, rounding up or down with equal 50% probability when the fractional part is 0.5, to eliminate directional bias in such instances.[29] Stochastic rounding generalizes this by selecting the nearest integer with probability proportional to the distance from the value; for a number $ x = n + f $ where $ n $ is the integer part and $ 0 \leq f < 1 $, the probability of rounding up to $ n+1 $ is $ f $, and down to $ n $ is $ 1 - f $. This method ensures unbiased rounding on average, as the expected value equals the original number.[28] In machine learning, stochastic rounding is applied during quantization of neural network weights and activations to low precision, reducing variance in gradient estimates and enabling training with 16-bit fixed-point representations that achieve accuracy comparable to 32-bit floating-point. In parallel computing, it mitigates error growth in large-scale simulations by randomizing rounding in distributed operations, enhancing stability in low-precision environments.[30] For example, applying stochastic rounding to 3.3 yields 3 with probability 0.7 and 4 with probability 0.3, while 3.7 yields 4 with probability 0.7 and 3 with probability 0.3, preserving the expected value in both cases.[29] As a deterministic alternative to these randomized approaches, half-to-even rounding (also known as banker's rounding) resolves ties by selecting the even integer, though it does not fully eliminate bias in non-random data.[24]

Comparison of Integer Rounding Methods

Integer rounding methods vary in their approach to handling fractional parts, particularly in tie situations where the fractional part is exactly 0.5, leading to trade-offs in bias, accuracy, and determinism. A systematic comparison reveals differences in directional bias, where directed methods systematically favor one direction, while nearest-integer methods aim for minimal error but differ in tie resolution. Monotonicity, the property that rounding preserves the order of inputs (i.e., if $ x \leq y $, then $ \round(x) \leq \round(y) $), holds for most standard methods but can be affected by inconsistent tie-breaking in some implementations. Preparatory rounding, often used as an intermediate step to reduce error propagation in multi-step computations, and randomized rounding, which introduces probability to mitigate bias, add further dimensions to these comparisons.[24] The following table summarizes key integer rounding methods, focusing on their tie-breaking rules for halfway cases, bias characteristics, monotonicity, and examples for 2.5 and -2.5 (assuming standard definitions where "up" refers to toward positive infinity unless specified otherwise). Bias is described qualitatively: directed methods exhibit systematic directional bias, while nearest methods have average bias near zero except where ties introduce skew.[24]
MethodTie Rule (for 0.5)BiasMonotonicityExample: 2.5Example: -2.5
FloorAlways down (toward -∞)Negative (or zero)Yes2-3
CeilingAlways up (toward +∞)Positive (or zero)Yes3-2
Truncation (toward zero)Always toward zeroToward zeroYes2-2
Round half up (to +∞)Toward +∞PositiveYes3-2
Round half down (to -∞)Toward -∞NegativeYes2-3
Round half to evenTo nearest even integerUnbiased on averageYes2-2
Round half away from zeroAway from zeroAway from zeroYes3-3
Stochastic (randomized)Probabilistic (50% each way)Unbiased (zero expected)No (probabilistic)2 or 3 (50%)-3 or -2 (50%)
Preparatory (e.g., dithered)Adjusted based on prior errorReduced propagation biasVariesDepends on contextDepends on context
Note: Preparatory rounding does not have a fixed tie rule, as it typically incorporates prior rounding errors to prepare for subsequent operations, often reducing overall bias in chains of computations.[24] Directed rounding methods, such as floor and ceiling, introduce a consistent bias in one direction, which can accumulate in iterative algorithms but is useful for guaranteeing bounds (e.g., ceiling ensures sufficient allocation by rounding up). In contrast, nearest-integer methods like round half up exhibit a slight positive bias due to always resolving ties upward, leading to systematic overestimation over many operations. Round half to even and stochastic methods achieve zero expected bias, making them preferable for applications requiring statistical neutrality, though half up remains common in intuitive, single-step calculations despite its skew. Randomized methods, including stochastic rounding, eliminate directional bias entirely but introduce variance, which can be beneficial in optimization contexts like machine learning where it helps escape local minima.[24] Accuracy is often measured by mean squared error (MSE), where MSE = variance + (bias)^2; thus, unbiased methods like half to even generally yield lower MSE than biased alternatives for the same variance level, as the bias term vanishes. For instance, in simulations of summation operations, deterministic biased rounding shows higher relative errors compared to stochastic variants, which maintain low bias at the cost of increased short-term variance. Directed methods have higher MSE in unbiased estimation tasks but excel in scenarios prioritizing worst-case guarantees over average performance. Preparatory rounding can further improve accuracy in multi-step processes by distributing errors more evenly, though its effectiveness depends on the specific error model.[24] In practice, directed methods like ceiling are employed in resource allocation, such as file system block sizing, to avoid underestimation (e.g., ensuring at least the required space by rounding up). Round half to even is widely adopted in financial computations to prevent cumulative positive bias from repeated rounding, as seen in standards for monetary calculations where neutrality preserves fairness over transactions. Stochastic and preparatory rounding find use in numerical simulations and machine learning training, where unbiased error distribution enhances convergence and reduces variance in gradient-based methods.[25][24] Each method has distinct pros and cons: directed rounding offers predictability and monotonicity for bounding but suffers from bias accumulation; round half up is intuitive and simple yet introduces positive skew unsuitable for averages; half to even provides unbiased results with determinism but may confuse users due to non-intuitive ties (e.g., 2.5 to 2); half away from zero is symmetric in magnitude but biases away from zero, increasing error in centered data; stochastic rounding eliminates bias and aids optimization but lacks reproducibility; preparatory methods mitigate propagation issues in pipelines at the expense of added complexity. The choice depends on whether bias tolerance, determinism, or average accuracy is prioritized.[24]

Rounding to Non-Integers

Multiples and Scales

Rounding to multiples involves adjusting a numerical value to the nearest multiple of a specified step size d>0d > 0, where dd represents the scaling factor or precision unit. This extends the concept of rounding to integers by applying the operation on a normalized scale, effectively targeting discrete points spaced by dd rather than by 1. For instance, rounding 17 to the nearest multiple of 5 yields 15, as 17 is closer to 15 than to 20. The standard formula for rounding to the nearest multiple of dd is \round(xd)×d\round\left(\frac{x}{d}\right) \times d, where \round\round denotes the nearest integer rounding function applied to the scaled input x/dx / d. This method leverages nearest integer rounding as its underlying mechanism to determine the appropriate integer coefficient before rescaling. In cases of ties, where the scaled value is exactly halfway between two integers (e.g., x/d=k+0.5x / d = k + 0.5 for integer kk), the same tie-breaking rules as in integer rounding apply, such as rounding half up to the next multiple.[31] Practical examples abound in everyday applications. In currency handling, values are often rounded to the nearest cent, where d=0.01d = 0.01, ensuring transactions align with monetary denominations; for example, $1.235 rounds to $1.24.[32] Similarly, measurements may be rounded to the nearest 10 units for simplicity in reporting, such as approximating 169 cm to 170 cm when estimating height in rough scales.[33] Directed variants provide one-sided rounding to multiples for specific needs. The floor operation to a multiple, given by \floor(xd)×d\floor\left(\frac{x}{d}\right) \times d, rounds down to the largest multiple not exceeding xx, useful for conservative estimates in financial or inventory contexts where underestimation avoids overcommitment; for example, flooring 17 to the nearest multiple of 5 yields 15.[34] Ceiling rounding, \ceil(xd)×d\ceil\left(\frac{x}{d}\right) \times d, rounds up analogously but is less common for conservatism.[35]

Logarithmic and Scaled Rounding

Logarithmic rounding approximates a positive number xx to the nearest power of a base b>1b > 1, which is effective for compressing wide-ranging data into a compact representation while emphasizing relative scales. The possible target values are bkb^k for integer kk, spaced evenly on a logarithmic axis. For example, with base b=10b = 10, rounding 250 selects between 100 (10210^2) and 1000 (10310^3); since 250 is closer to 100 in relative terms, it rounds to 100.[36] The computation proceeds by finding the exponent k=\round(logbx)k = \round(\log_b x), where \round\round denotes rounding to the nearest integer (with ties typically resolved away from zero or to even, depending on convention), and the result is bkb^k. This formula derives from the property that distances on a log scale correspond to multiplicative factors, ensuring the approximation minimizes relative deviation.[37][38] Scaled rounding builds on this by varying the step size proportionally to the number's magnitude, often aligning with scientific notation to achieve uniform relative accuracy across scales. For instance, numbers near 10210^2 might use steps of 10, while those near 10310^3 use steps of 100, effectively rounding the mantissa while preserving the exponent. This is evident in file size notations, where values are scaled to units like KB ($ \approx 10^3 $ bytes) or MB (10610^6 bytes), rounding to the nearest unit for readability over exponential ranges. Similarly, map scales are frequently adjusted to "nice" ratios like 1:100000, selecting powers or multiples that simplify representation without losing essential proportion.[39] These methods excel in providing consistent relative precision, where the error as a fraction of the value remains bounded (typically under 50% for nearest power selection), unlike uniform rounding which yields growing relative errors for small values. This makes them valuable in fields like scientific visualization and data summarization, where absolute precision is secondary to proportional insight.[36]

Floating-Point and Fractional Rounding

Floating-point arithmetic relies on standardized rounding to manage the limited precision of binary representations. The IEEE 754 standard defines four primary rounding modes for floating-point operations: round to nearest (with ties to even), round toward positive infinity, round toward negative infinity, and round toward zero.[40] These modes ensure consistent behavior across computations, mirroring integer rounding but applied to the normalized significand (mantissa) in binary form.[41] In binary floating-point, a number is expressed as ±(1.f)×2e\pm (1.f) \times 2^e, where ff is the fractional part of the mantissa with p1p-1 bits for precision pp (e.g., p=24p=24 for single precision, including the implicit leading 1). When the exact result exceeds this precision, the mantissa is rounded to the nearest representable value according to the selected mode.[16] To perform the rounding accurately, implementations use extra bits beyond the mantissa: a guard bit (the first bit after the mantissa), a round bit (the next), and a sticky bit (the logical OR of all remaining lower bits). These bits capture information lost during alignment or computation, enabling correct decisions for rounding up or down while minimizing errors. For instance, in round-to-nearest mode, if the guard bit is 1 and the round or sticky bit indicates additional magnitude, the mantissa increments; ties are resolved by checking the least significant bit of the mantissa for evenness.[42] This mechanism ensures that floating-point operations achieve correctly rounded results, as required by IEEE 754.[43] A practical example of decimal-to-binary floating-point rounding occurs with the decimal 0.1, which in binary is the infinite series 0.000110011001120.0001100110011\ldots_2. In single-precision IEEE 754 (23 explicit mantissa bits), this normalizes to 1.10011001100110011001100112×241.1001100110011001100110011\ldots_2 \times 2^{-4}, which rounds to 1.100110011001100110011012×241.10011001100110011001101_2 \times 2^{-4} under round-to-nearest ties-to-even, resulting in the stored value 0x3DCCCCCD (hexadecimal), slightly greater than exact 0.1.[44] Such rounding introduces small errors but maintains consistency in binary hardware. Beyond binary representations, rounding to simple rational fractions involves approximating a real number xx to the nearest multiple of k/mk/m, where kk and mm are integers. The standard method multiplies xx by mm, rounds the product to the nearest integer kk (using any desired mode, often to nearest), and divides by mm to obtain k/mk/m.[45] For example, to round 0.3 to the nearest multiple of 1/8=0.1251/8 = 0.125, compute 8×0.3=2.48 \times 0.3 = 2.4, round to 2, then 2/8=0.252/8 = 0.25. In practical contexts like baking, measurements such as ingredient volumes are often rounded to the nearest 1/41/4 cup (0.25 cups) for simplicity and measurability with standard tools.[46] This approach preserves usability while controlling approximation error to at most 1/(2m)1/(2m).

Binning and Available Values

In rounding to available values, a real number is approximated by selecting the element from a predefined finite discrete set that minimizes the distance to the target value, typically using the absolute difference or a domain-specific metric. This approach is essential in fields where only a limited number of standard values are feasible for production or use, ensuring practical approximations without custom manufacturing. The general algorithm involves computing the distance from the input to each set member and choosing the minimum, which can be optimized to O(log n) time if the set is sorted.[24] A prominent example is the selection of resistor values from the E12 preferred number series, standardized for 10% tolerance components, which includes 12 values per decade such as 10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, and 82, scaled by powers of 10. When designing a circuit requiring a specific resistance, engineers round the calculated value to the nearest E12 standard by minimizing the relative or absolute error to these discrete options, as defined in IEC 60063. This series derives from the 12th root of 10 to evenly distribute values logarithmically across decades, facilitating tolerance coverage. For arbitrary binning, such as in histogram construction for data analysis, values are grouped into custom intervals, and each is represented by the bin's midpoint or center to approximate the data within that range. Assignment to the closest bin occurs by checking which interval contains the value, with the midpoint serving as the rounded target to minimize average deviation under uniform distribution assumptions. This method is a form of quantization where bin boundaries define the discrete sets, and the representative value provides a compact summary for statistical inference.[47] In image processing, color quantization applies this principle by mapping each pixel's RGB value to the nearest color in a reduced palette, using Euclidean distance in color space to preserve visual fidelity while limiting the number of distinct colors. For instance, reducing a 24-bit image to an 8-bit palette involves finding the palette entry with the smallest distance metric for each pixel. Similarly, educational grading systems often bin numerical scores into letter grades (e.g., A for 90-100, B for 80-89) by assigning to the interval whose midpoint is closest, though thresholds are sometimes used instead of pure distance minimization. Challenges arise with unevenly spaced discrete sets, as simple scaling or arithmetic shortcuts are unavailable, necessitating a complete or logarithmic search over all elements to identify the nearest, which becomes computationally intensive for large sets. Floating-point rounding represents a regular case of this binning, where values are snapped to the nearest representable number in the finite set defined by the format's precision and exponent range.[16]

Specialized Applications

Image and Signal Processing

In image and signal processing, rounding during quantization often introduces visible artifacts such as banding in images or harmonic distortion in audio signals, which can degrade perceptual quality. Dithering addresses this by intentionally adding low-level noise to the signal prior to rounding, randomizing the quantization error to make it less perceptible and more closely resemble natural noise. This technique linearizes the quantization process, ensuring that the average output over multiple samples matches the input, thereby masking artifacts like contouring or false edges.[48] A prominent implementation of dithering in image processing is error diffusion, which systematically propagates the rounding error to neighboring pixels rather than relying solely on random noise. In the Floyd-Steinberg algorithm, for each pixel, the value is rounded to the nearest available level (e.g., 0 or 1 in binary halftoning), and the error ee is computed as e=x\round(x)e = x - \round(x), where xx is the original pixel value. This error is then distributed to adjacent unprocessed pixels using a fixed kernel, such as 716\frac{7}{16} to the right neighbor, 316\frac{3}{16} to the pixel below-left, 516\frac{5}{16} below, and 116\frac{1}{16} below-right, ensuring the error is diffused spatially without accumulating locally. This method, introduced in 1976, remains widely adopted for its balance of computational efficiency and visual quality. Error diffusion dithering finds key applications in image halftoning, where continuous-tone images are converted to limited palettes for printing or display, and in audio quantization, such as reducing bit depth from 24-bit to 16-bit during digital-to-analog conversion to prevent quantization noise from manifesting as audible distortion. For instance, applying Floyd-Steinberg dithering to an 8-bit grayscale image reduced to 1-bit produces a halftone output that retains subtle textures and gradients, unlike plain rounding, which results in blocky, posterized regions with prominent banding along smooth transitions.[48] The primary benefits of dithering in these contexts include reduced visibility of quantization-induced banding and improved preservation of fine details, leading to outputs that better approximate the original signal's perceptual characteristics without requiring additional bits. Stochastic rounding serves as a related randomization approach, where rounding decisions incorporate probabilistic elements to decorrelate errors, akin to simpler forms of dither.[48]

Numerical Computation Challenges

In numerical computations, rounding errors can accumulate and propagate in ways that undermine the reliability of algorithms, particularly in multi-step processes like summations or function evaluations. One approach to mitigate this is Monte Carlo arithmetic, which introduces randomization into the rounding process to simulate higher-precision arithmetic. By randomly choosing the rounding direction (e.g., up or down) for each operation with equal probability, the errors behave like uncorrelated random variables, allowing their statistical properties to be analyzed and averaged out over multiple runs to approximate the exact result with reduced bias. This technique, originally proposed to assess and bound rounding error propagation, enables the simulation of extended precision on standard hardware by repeating computations and taking ensemble averages, effectively reducing the variance of the error distribution.[49] To achieve exact or near-exact results despite inevitable rounding in finite-precision arithmetic, techniques such as compensated summation are employed. These methods track and correct the rounding errors introduced at each step of a computation, such as in summing a series of floating-point numbers. For instance, in compensated summation, after adding two numbers aa and bb to get the rounded sum s=fl(a+b)s = \text{fl}(a + b), an error term e=a+bse = a + b - s is computed and compensated in subsequent additions, effectively recovering the lost precision without requiring higher-precision intermediates. This approach, which can double the effective precision of a sum (e.g., making a 64-bit summation behave like 128-bit), is particularly valuable in numerical linear algebra and scientific simulations where error accumulation is a concern. Seminal work by Ogita, Rump, and Oishi formalized accurate summation algorithms that guarantee a faithfully rounded result—a floating-point number adjacent to the exact sum—under mild conditions on the input data.[50] Double rounding arises when a computation involves successive rounding operations at different precisions, such as in fused multiply-add instructions or conversions between formats, potentially introducing additional error not present in a single rounding to the final precision. For example, in extended-precision intermediates like the 80-bit format (with 64-bit mantissa), computing round(round(x,53 bits),24 bits)\text{round}(\text{round}(x, 53 \text{ bits}), 24 \text{ bits}) may differ from round(x,24 bits)\text{round}(x, 24 \text{ bits}) because the intermediate rounding to 53 bits (double precision) can shift the value away from the nearest representable 24-bit (single precision) number. This discrepancy, which can lead to errors up to 1.5 ulps (units in the last place) instead of 0.5 ulps in single rounding, is bounded and analyzed using tools like the Sterbenz lemma. The lemma states that if two positive floating-point numbers aa and bb satisfy a/2b2aa/2 \leq b \leq 2a, then their difference aba - b is exactly representable without rounding error, providing a foundation for proving that double rounding does not always degrade subtraction accuracy in such cases. These bounds are crucial for verifying the correctness of hardware operations and software libraries handling mixed precisions.[51][52] A particularly challenging issue in numerical computation is the table-maker's dilemma, which concerns the implementation of correctly rounded elementary functions like square root or sine in floating-point libraries. Correct rounding requires that for every possible input, the output is the floating-point number nearest to the true mathematical result (or following a specified tie-breaking rule), but achieving this demands exhaustive verification across the entire input domain, often 2532^{53} values for double precision, to identify "hard-to-round" cases where the result lies extremely close to a midpoint between representables. These cases, which may require high-precision arguments or modular computations to resolve, can take years of computational effort to certify, as seen in the development of the CRlibm library for correctly rounded math functions. The dilemma arises because standard algorithms using polynomial approximations or table lookups may fail to guarantee correct rounding without such rigorous testing, impacting applications in scientific computing where certified accuracy is essential.[53]

Observational and Search Contexts

In meteorological observations, particularly those conducted by the National Weather Service (NWS) in the United States, temperatures are rounded to the nearest whole degree Fahrenheit, with midpoint values (e.g., .5) rounded up toward positive infinity for positive temperatures and toward zero for negative ones. For instance, +3.5°F rounds to +4°F, while -3.5°F rounds to -3°F, and -3.6°F rounds to -4°F.[54] This convention ensures consistent reporting in surface weather observations, such as METARs, where temperatures below zero are prefixed with "M" to indicate negativity.[55] Wind speeds in these observations are similarly standardized, rounded to the nearest 5 knots, with calm winds (less than 3 knots) reported as 0 knots.[56] Direction is rounded to the nearest 10 degrees, facilitating uniform data transmission and analysis in aviation and forecasting applications.[55] A notable quirk arises with negative zero in temperature reporting: values between -0.4°F and -0.1°F round to 0°F but may be encoded as "M00" in METARs to preserve the indication that the measurement was subzero, aiding calculations involving thermal properties or historical comparisons without losing directional context for derived metrics like wind chill.[57] This preservation of sign bit information prevents errors in downstream computations, such as those integrating temperature with wind direction for vector-based analyses. In search and database contexts, rounding numerical data stored as strings can disrupt lexical ordering, leading to counterintuitive results in sorted lists or queries. For example, a value rounded to "3.10" may sort before "3.2" due to character-by-character comparison ("3.1" prefix precedes "3.2"), but inconsistent decimal places—such as "9.9" versus a rounded "10.0"—can invert numerical order, with "10.0" appearing before "9.9" because '1' < '9'. This affects applications like cataloging observational data, where unnormalized string representations cause apparent misordering. Such inconsistencies extend to database queries on rounded temperature reports, where exact matches fail if source data retains precision while queries use rounded equivalents, resulting in missed records. Conversely, multiple unrounded values converging on the same rounded figure (e.g., 22.4°F and 22.6°F both to 22°F) can produce unintended duplicates in aggregated search results, complicating analyses of historical weather datasets. Directed rounding modes, as occasionally applied in observational protocols, mitigate some mismatches by enforcing consistent bias but require careful alignment across storage and retrieval systems.[55]

Historical and Practical Aspects

Development of Rounding Techniques

The earliest known use of rounding techniques appears in ancient Babylonian mathematics around 2000 BCE, where scribes employed the sexagesimal (base-60) system to approximate measurements in economic and astronomical records. In administrative texts from the Old Babylonian Kingdom of Larsa, rounding was systematically applied to quantities like grain or labor allocations, often truncating or adjusting fractional parts to simplify calculations on clay tablets while minimizing errors in practical contexts.[58] This approach reflected the limitations of cuneiform notation, where precise fractions were expressed but frequently rounded to whole or convenient sexagesimal units for usability.[58] In ancient Greek geometry, approximations emerged as a tool for handling irrational lengths, with mathematicians like Archimedes (c. 287–212 BCE) using bounding intervals to round values such as π between 3 + 10/71 and 3 + 1/7 through the method of exhaustion. These techniques prioritized rigorous bounds over exact values, influencing later geometric computations by emphasizing controlled approximation to avoid overestimation or underestimation in proofs. During the medieval period, Islamic scholars advanced concepts akin to significant figures; for instance, Jamshid al-Kashi (c. 1380–1429) in his 1427 treatise The Key to Arithmetic detailed decimal-based rounding for trigonometric tables, computing π to 16 decimal places by iteratively refining approximations.[59] Al-Kashi's methods, which involved carrying over digits and limiting precision to essential figures, facilitated high-accuracy astronomical calculations and bridged positional notation with practical rounding.[59] By the 19th century, rounding gained prominence in statistics, with Francis Galton analyzing measurement errors—including those from rounding—in anthropometric data during the 1880s, as explored in his 1889 work Natural Inheritance, where he quantified how discretization affected regression estimates. This adoption highlighted rounding's role in error propagation, prompting statisticians to model it as a source of bias in empirical distributions. In the 20th century, the IEEE 754 standard, ratified in 1985, formalized rounding modes for floating-point arithmetic, mandating default round-to-nearest with ties to even to ensure reproducibility across computations. Key innovations included bankers' rounding, a method historically used in financial contexts to mitigate cumulative bias by rounding halves to the nearest even integer.[60] Stochastic rounding, proposed by John von Neumann and William Goldstine in the early 1950s amid Monte Carlo simulations for nuclear physics, introduced probabilistic decisions at midpoints to reduce variance in iterative algorithms.[28] The evolution of rounding progressed from manual logarithmic and trigonometric tables—reliant on hand-computed approximations by figures like Henry Briggs in the 17th century—to computational modes in the mid-20th century, where electronic calculators automated modes like truncation or rounding to fixed precision, enhancing efficiency in scientific simulations. This shift, accelerated by early computers like ENIAC in the 1940s, integrated rounding into hardware to balance accuracy and speed, laying groundwork for modern numerical libraries.[28]

Implementations in Programming

In programming, rounding functions are essential for handling numerical precision in computations involving floating-point numbers. These functions vary across languages in their default behaviors, particularly in how they resolve ties (halfway cases like 0.5). For instance, Java's Math.round(double a) method returns the closest long integer to the argument by adding 0.5 and then taking the floor, effectively rounding halfway cases toward positive infinity—for example, Math.round(0.5) yields 1, while Math.round(-0.5) yields 0.[61] Similarly, Python's built-in round() function, introduced in version 3.0, employs banker's rounding (round half to even) to minimize bias in repeated operations; thus, round(0.5) returns 0, round(1.5) returns 2, and round(2.5) returns 2.[62] The C standard library provides functions like round(double x), which rounds to the nearest integer, with halfway cases rounded away from zero regardless of the current floating-point rounding mode—round(0.5) returns 1.0, and round(-0.5) returns -1.0. Related functions such as lround(double x) return the result as a long integer, enabling integer-based computations. In JavaScript, Math.round(x) also rounds to the nearest integer, but its handling of halfway cases follows a pattern similar to adding 0.5 and flooring: Math.round(0.5) returns 1, Math.round(-0.5) returns -0 (effectively 0), Math.round(1.5) returns 2, and Math.round(-1.5) returns -1.[63] Specialized libraries extend these capabilities with configurable modes. In NumPy, a Python library for numerical computing, np.round(a, decimals=0) rounds array elements to the nearest integer using half-even rounding for ties, consistent with Python's built-in behavior; for example, np.round([0.5, 1.5, 2.5]) yields [0., 2., 2.]. NumPy also supports np.[floor](/page/Floor) and np.ceil for directional rounding—np.[floor](/page/Floor) toward negative infinity and np.ceil toward positive infinity—while handling negative numbers symmetrically; np.[floor](/page/Floor)([-0.1]) returns [-1.], and np.ceil([-0.1]) returns [0.]. Ties and negatives are managed to avoid bias, but users must specify modes explicitly for non-default behaviors like round half up via custom implementations. Practical examples illustrate these functions alongside common pitfalls. For flooring and ceiling in Python, the following code demonstrates directional rounding:
import math

print(math.floor(3.7))   # 3
print(math.ceil(3.7))    # 4
print(math.floor(-3.7))  # -4
print(math.ceil(-3.7))   # -3
A well-known issue arises from binary floating-point representation, where decimal fractions like 0.1 cannot be stored exactly, leading to rounding errors in arithmetic. In Python, 0.1 + 0.2 evaluates to approximately 0.30000000000000004, not exactly 0.3, causing comparisons like 0.1 + 0.2 == 0.3 to return False.[64] Similar discrepancies occur in Java, JavaScript, and C, often requiring epsilon-based comparisons or decimal libraries for precision-sensitive applications. Portability challenges stem from varying default rounding modes and floating-point implementations across languages, even when adhering to IEEE 754 standards for binary representation. For example, a value rounded half-even in Python may round half-away-from-zero in C, yielding different results for inputs like 2.5 (2 in Python, 3 in C), which can introduce subtle bugs in cross-language or cross-platform code.[65] Developers must document and test rounding behaviors to ensure consistency, especially in numerical libraries or distributed systems.

Rounding Standards and Conventions

The IEEE 754 standard for floating-point arithmetic defines four primary rounding modes: round to nearest (with ties to even), round toward zero, round toward positive infinity, and round toward negative infinity, with round to nearest, ties to even serving as the default mode to minimize bias in repeated operations.[66] This standard, originally published in 1985 and revised in 2008 to include decimal floating-point formats, ensures consistent handling of inexact results across computing environments. In financial contexts, rounding conventions vary by jurisdiction and standard; for instance, in the United States Generally Accepted Accounting Principles (GAAP), round half up is commonly used, where values ending in 5 or greater are rounded upward to the nearest whole unit, to align with reporting precision in financial statements. While ISO 4217 specifies the number of decimal places for currency representation (e.g., two for most fiat currencies), it does not prescribe a universal rounding mode, leaving implementation to regional practices such as half-even rounding in some international banking systems to reduce cumulative errors. Scientific conventions emphasize significant figures, where rounding follows the half-up rule: if the digit following the last significant figure is 5 or greater, the preceding digit is increased by one, ensuring results reflect the precision of the original measurements without introducing undue bias.[10] The National Institute of Standards and Technology (NIST) provides guidelines for measurements, recommending rounding to the same decimal place as the uncertainty's least significant digit, often using round half to even to avoid systematic overestimation in calibration and error propagation.[67] ISO 80000-1 outlines general rules for quantities and units, including rounding numbers to maintain consistency with the International System of Units (SI), such as rounding to the nearest multiple of the unit's power of 10 while applying standard arithmetic conventions like half up for isolated values. Post-1985 revisions to IEEE 754, particularly the 2008 update incorporating decimal formats, have influenced these measurement standards by promoting interoperable rounding for binary-decimal conversions.[66] Emerging applications in AI model quantization, particularly post-2020 techniques like adaptive rounding, lack a unified standard, with methods such as AdaRound optimizing low-bit representations through data-driven adjustments rather than fixed modes, highlighting ongoing efforts toward standardization in high-impact machine learning deployments.[68] Recent advancements as of 2024 include Stochastic Rounding 2.0 for improved complexity analysis in low-precision arithmetic and model-preserving adaptive rounding techniques for AI quantization.[30][69] For example, meteorological conventions often round temperature readings to the nearest degree using half up to balance readability and precision in forecasts.[67]

References

User Avatar
No comments yet.