Troubleshooting: Array Values Stored as 0.10000001

Click For Summary
SUMMARY

The discussion addresses the issue of floating-point precision in programming, specifically when storing the value 0.1 in an array, which results in it being stored as 0.10000001. This imprecision leads to incorrect average calculations, preventing loops from terminating as expected. The root cause is identified as the inability of binary systems to represent certain decimal fractions accurately. A recommended solution is to store values as integers by multiplying them by a power of ten, thus avoiding floating-point errors.

PREREQUISITES
  • Understanding of floating-point arithmetic
  • Familiarity with binary representation of numbers
  • Knowledge of programming arrays
  • Basic skills in integer manipulation
NEXT STEPS
  • Research floating-point precision issues in programming languages
  • Learn about binary representation and its impact on decimal values
  • Explore techniques for storing decimal values as integers
  • Investigate libraries or tools that handle arbitrary precision arithmetic
USEFUL FOR

Software developers, data analysts, and anyone involved in numerical computing who needs to understand and mitigate floating-point precision issues in their applications.

SolStis
Messages
10
Reaction score
0
I am allocating a value of 0.1 to a position in an array and it seems to be storing itself as 0.10000001. The problem is that once all the values in the array have reached 0.1 the average should be 0.1 and the loop stops, but as it is being stored as 0.1000001 the average is > 0.1 and the loop never stops
any ideas?
 
Technology news on Phys.org
That looks to me like a problem I ran into many years ago in a program to solve differential equations: I set delta x equal to 0.001 and and thought I had it set to print values when x was equal to 0.1, 0.2, etc. but it never printed!

The problem was that since 0.1= 1/10 so the denominator is NOT a power of 2, in binary that is a repeating "decimal". It cannot be stored exactly in memory so the arithmetic is not exact.
 
Ive came up with a cumbersome solution to it. made an array equal to it and calculated the average of that then used that as the comparison variable. Bit cumbersome but it worked...

Thanks for the reply though
 
http://docs.sun.com/source/806-3568/ncg_goldberg.html"
 
Last edited by a moderator:
If you want accurate values, and you know how many decimal places you are working to, then you are better to store the numbers as integers.

Say you want to work to three decimal places, then multiply all the numbers by 1000 and store them as integers. That way you will get exact results.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 20 ·
Replies
20
Views
3K
  • · Replies 6 ·
Replies
6
Views
1K
  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
6
Views
6K
  • · Replies 7 ·
Replies
7
Views
3K