Floating Point Error
Contents |
by David Goldberg, published in the March, 1991 issue of Computing Surveys. Copyright 1991, Association for Computing Machinery, floating point rounding error Inc., reprinted by permission. Abstract Floating-point arithmetic is considered an
Floating Point Python
esoteric subject by many people. This is rather surprising because floating-point is ubiquitous in computer systems.
Floating Point Example
Almost every language has a floating-point datatype; computers from PCs to supercomputers have floating-point accelerators; most compilers will be called upon to compile floating-point algorithms
Floating Point Arithmetic Examples
from time to time; and virtually every operating system must respond to floating-point exceptions such as overflow. This paper presents a tutorial on those aspects of floating-point that have a direct impact on designers of computer systems. It begins with background on floating-point representation and rounding error, continues with a discussion of floating point calculator the IEEE floating-point standard, and concludes with numerous examples of how computer builders can better support floating-point. Categories and Subject Descriptors: (Primary) C.0 [Computer Systems Organization]: General -- instruction set design; D.3.4 [Programming Languages]: Processors -- compilers, optimization; G.1.0 [Numerical Analysis]: General -- computer arithmetic, error analysis, numerical algorithms (Secondary) D.2.1 [Software Engineering]: Requirements/Specifications -- languages; D.3.4 Programming Languages]: Formal Definitions and Theory -- semantics; D.4.1 Operating Systems]: Process Management -- synchronization. General Terms: Algorithms, Design, Languages Additional Key Words and Phrases: Denormalized number, exception, floating-point, floating-point standard, gradual underflow, guard digit, NaN, overflow, relative error, rounding error, rounding mode, ulp, underflow. Introduction Builders of computer systems often need information about floating-point arithmetic. There are, however, remarkably few sources of detailed information about it. One of the few books on the subject, Floating-Point Computation by Pat Sterbenz, is long out of print. This paper is a tutorial on those aspects of floating-poin
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta floating point numbers explained Discuss the workings and policies of this site About Us Learn floating point binary more about Stack Overflow the company Business Learn more about hiring developers or posting ads with us Stack double floating point Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 4.7 million programmers, just like you, https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html helping each other. Join them; it only takes a minute: Sign up Floating point inaccuracy examples up vote 29 down vote favorite 46 How do you explain floating point inaccuracy to fresh programmers and laymen who still think computers are infinitely wise and accurate? Do you have a favourite example or anecdote which seems to get the http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples idea across much better than an precise, but dry, explanation? How is this taught in Computer Science classes? floating-point floating-accuracy share edited Apr 24 '10 at 22:34 community wiki 4 revs, 3 users 57%David Rutten locked by Bill the Lizard May 6 '13 at 12:41 This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center. Take a look into this article: What Every Computer Scientist Should Know About Floating-Point Arithmetic –Rubens Farias Jan 20 '10 at 10:17 1 You can comprove this with this simple javascript:alert(0.1*0.1*10); –user216441 Apr 24 '10 at 23:07 comments disabled on deleted / locked posts / reviews| 7 Answers 7 active oldest votes up vote 26 down vote accepted There are basically two major pitfalls people stumble in with floating-point numbers. The
base 2 (binary) fractions. For example, the decimal fraction 0.125 has value 1/10 + 2/100 + 5/1000, and in the same way the binary fraction 0.001 has value 0/2 + 0/4 + 1/8. These two fractions have identical https://docs.python.org/2/tutorial/floatingpoint.html values, the only real difference being that the first is written in base 10 http://floating-point-gui.de/errors/propagation/ fractional notation, and the second in base 2. Unfortunately, most decimal fractions cannot be represented exactly as binary fractions. A consequence is that, in general, the decimal floating-point numbers you enter are only approximated by the binary floating-point numbers actually stored in the machine. The problem is easier to understand at first in base 10. floating point Consider the fraction 1/3. You can approximate that as a base 10 fraction: 0.3 or, better, 0.33 or, better, 0.333 and so on. No matter how many digits you're willing to write down, the result will never be exactly 1/3, but will be an increasingly better approximation of 1/3. In the same way, no matter how many base 2 digits you're willing to use, the decimal value 0.1 cannot floating point error be represented exactly as a base 2 fraction. In base 2, 1/10 is the infinitely repeating fraction 0.0001100110011001100110011001100110011001100110011... Stop at any finite number of bits, and you get an approximation. On a typical machine running Python, there are 53 bits of precision available for a Python float, so the value stored internally when you enter the decimal number 0.1 is the binary fraction 0.00011001100110011001100110011001100110011001100110011010 which is close to, but not exactly equal to, 1/10. It's easy to forget that the stored value is an approximation to the original decimal fraction, because of the way that floats are displayed at the interpreter prompt. Python only prints a decimal approximation to the true decimal value of the binary approximation stored by the machine. If Python were to print the true decimal value of the binary approximation stored for 0.1, it would have to display >>> 0.1 0.1000000000000000055511151231257827021181583404541015625 That is more digits than most people find useful, so Python keeps the number of digits manageable by displaying a rounded value instead >>> 0.1 0.1 It's important to realize that this is, in a real sense, an illusion: the value in the machine is not exactly 1/10, you're simply rounding the display of the true machine value. This fac
general: Multiplication and division are “safe” operations Addition and subtraction are dangerous, because when numbers of different magnitudes are involved, digits of the smaller-magnitude number are lost. This loss of digits can be inevitable and benign (when the lost digits also insignificant for the final result) or catastrophic (when the loss is magnified and distorts the result strongly). The more calculations are done (especially when they form an iterative algorithm) the more important it is to consider this kind of problem. A method of calculation can be stable (meaning that it tends to reduce rounding errors) or unstable (meaning that rounding errors are magnified). Very often, there are both stable and unstable solutions for a problem. There is an entire sub-field of mathematics (in numerical analysis) devoted to studying the numerical stability of algorithms. For doing complex calculations involving floating-point numbers, it is absolutely necessary to have some understanding of this discipline. The article What Every Computer Scientist Should Know About Floating-Point Arithmetic gives a detailed introduction, and served as an inspiration for creating this website, mainly due to being a bit too detailed and intimidating to programmers without a scientific background. © Published at floating-point-gui.de under the Creative Commons Attribution License (BY) The Floating-Point Guide Home Basic Answers References xkcd Number Formats Binary Fractions Floating-Point Exact Types On Using Integers Errors Rounding Comparison Propagation Languagecheat sheets C# Java JavaScript Perl PHP Python Ruby SQL