Numeric precision in Microsoft Excel: Difference between revisions

Content deleted Content added
added accumulation and (catastrophic-) cancellation to the issues causing inaccuracies
No edit summary
Line 15:
 
==Accuracy and binary storage==
[[File:Excel fifteen figure.PNG|thumb|390px|Excel maintains 15 figures in its numbers, but they are not always accurate: mathematical the bottom line should be the same as the top line, in 'fp-math' the step '1 + 1/9000' leads to a roundig up as the first bit of the 14 bit tail '10111000110010' of the mantissa falling off the table when adding 1 is a '1', this uprounding is not undone when subtracting the 1 again, since there is no information about the origin of the values in this step. thus the 're-subtracting' of 1 leaves a mantissa ending in '100000000000000' instead of '010111000110010', representing a value of '1.1111111111117289E-4' rounded by ex$el to 15 significant digits: '1.11111111111173E-4'.]]
[[File:Excel errors.PNG|thumb|390px|Of course, mathematical 1 + x − 1 = x, 'floating point math' is sometimes a little different, that's not to be blamed on ex$el. The discrepancy indicates the error. All errors but the last are beyond the 15-th decimalsignificant digit of the intermediate 1+x value, all errors are in high value digits of the final result, that's the problematic effect of 'cancellation'.]]
In the top figure the fraction 1/9000 in Excel is displayed. Although this number has a decimal representation that is an infinite string of ones, Excel displays only the leading 15 figures. In the second line, the number one is added to the fraction, and again Excel displays only 15 figures. In the third line, one is subtracted from the sum using Excel. Because the sum has only eleven 1s after the decimal, the true difference when ‘1’ is subtracted is three 0s followed by a string of eleven 1s. However, the difference reported by Excel is three 0s followed by a 15-digit string of ''thirteen'' 1s and two extra erroneous digits. Thus, the numbers Excel calculates with are ''not'' the numbers that it displays. Moreover, the error in Excel's answer is not simply round-off error, it's a effect in floating point calculations called 'cancellation'.
 
The inaccuracy in Excel calculations is more complicated than errors due to a precision of 15 significant figures. Excel's storage of numbers in binary format also affects its accuracy.<ref name=deLevie>
Line 23:
{{cite book |title=Advanced Excel for scientific data analysis |publisher=Oxford University Press |author=Robert de Levie |author-link=Robert de Levie |year=2004 |isbn=0-19-515275-1 |page=44 |chapter=Algorithmic accuracy |url=https://www.amazon.com/Advanced-Excel-Scientific-Data-Analysis/dp/0195152751/ref=sr_1_1?ie=UTF8&s=books&qid=1270770876&sr=1-1#reader_0195152751}}
 
</ref> To illustrate, the lower figure tabulates the simple addition {{nowrap|1 + ''x'' − 1}} for several values of ''x''. All the values of ''x'' begin at the 15-th decimal, so Excel must take them into account. Before calculating the sum 1 + ''x'', Excel first approximates ''x'' as a binary number. If this binary version of ''x'' is a simple power of 2, the 15-digit decimal approximation to ''x'' is stored in the sum, and the top two examples of the figure indicate recovery of ''x'' without error. In the third example, ''x'' is a more complicated binary number, ''x'' = 1.110111⋯111 × 2<sup>−49</sup> (15 bits altogether). Here the ''x'IEEE 754 double value' resulting of the 15 bit figure is approximated3.330560653658221E-15, which is rounded! by excel for the 4-bit'user binaryinterface' 1to 15 digits 3.11133056065365822E-15, ×and 2<sup>−49</sup>then (somedisplayed insightwith into30 thisdecimals approximationdigits cangets beone found'fake usingzero' [[geometricadded, progression]]:thus the 'binary'x and 'decimal' =values 1.11in ×the 2<sup>−49</sup>sample +are 2<sup>−52</sup>identical ×only (1in display, 2<sup>−11</sup>)the values associated with the cells are different (1.111101111111111100000000000000000000000000000000000000 × 2<sup>−49</sup> + 2<sup>−52</sup> =vs. 1.1111101111111111011111111111111111111111111111111111101 × 2<sup>−49</sup> ). andsimilar is done by other spreadsheets, the decimalhandling equivalentof the different amount of thisdecimal crudedigits which can be exactly stored in the 53 4-bit approximationmantissa of a 'double' (e.g. 16 digits between 1 and 8, but only 15 between 0,5 and 1 and between 8 and 10) is usedsomewhat difficult and solved 'suboptimal'. In the fourth example, ''x'' is a ''decimal'' number not equivalent to a simple binary (although it agrees with the binary of the third example to the precision displayed). The decimal input is approximated by a binary and then ''that'' decimal is used. These two middle examples in the figure show that some error is introduced.
 
The last two examples illustrate what happens if ''x'' is a rather small number. In the second from last example, ''x'' = 1.110111⋯111 × 2<sup>−50</sup>; 15 bits altogether. the binary is replaced very crudely by a single power of 2 (in this example, 2<sup>−49</sup>) and its decimal equivalent is used. In the bottom example, a decimal identical with the binary above to the precision shown, is nonetheless approximated differently from the binary, and is eliminated by truncation to 15 significant figures, making no contribution to {{nowrap|1 + ''x'' − 1}}, leading to ''x'' = 0.<ref name=decimal_input>