I am not sure what the problem is here. I have deduced this to a problem with my computer or notepad++ (the application I like to use to write up code).
This outputs, 20 -= 1/60. what I want to do is output 20 -= (1/60)–all the way till zero. [20 - (1200/60)] ~ in math terms. I want to see each subtraction, and so I am using document.write to output each time 1/60 is subtracted.But when I reach [20 - (1199/60] – the last subtraction before it should hit 0. A major problem occurs, and instead of the next value being 0, I get this: -1.4627882238826828e-13
Something else to note is that the subtraction before This, which should be [20 - (1199/60], is actually 0.016666666666520388. This is because javascript is rounding each time and this is leading me to get the wacky number instead of 0. I checked it out on a good old calculator and it is true 0.016666666666520388 - 1/60, is -1.4627882238826828e-13. So how do I stop javascript from doing this idiotic rounding, and messing up my code? (I’m trying to stop my code when it hits 0)
Also, I checkout my code using a good old calculator, and it does not do this silly rounding error, and it ACTUALLY hits 0! What a surprise!
Any ideas? Also I don’t want to calculate what this number will be each time, and making it my cut-off (instead of 0), simply because that is not fixing the problem–but avoiding it. And, I want to be as economic as possible with my precious code!
Also, I have read up a little on binary representations of decimals. How do I fix it for my specific example? I don’t want to download anything special off the internet.
There is an infinite number of numbers, it is not possible to represent them all exactly with a finite amount of memory.
If the numbers you want to represent exactly are all rational, then keep track of a numerator and denominator, the very same as is taught in school.
1200 / 60
1199 / 60
1198 / 60
1197 / 60
...
There are third party libraries for dealing with rational numbers, there’s nothing special about using those. I dare claim almost all websites you use download scripts from various locations (unless you block javascript in your browser)
You can also use a denominator that is a power of 2 (like 64) which can be represented exactly with a binary number system
Im doing a count down timer, so i need to subtract (1/60) each time. That is actually a great idea, to count down once from the numerator from a rational expression. YOU my may have just solved my problem. Thank you for that! really appreciate it!
Also I have read a bit about binary floating point representations, I am a novice computer programmer so I didn’t quite understand that part, care to enlighten me?
That’s far too open-ended, there’s no way I can guess what you’re missing without you telling me, and there’s nothing I can say that isn’t already accessible on that topic. You already know this.
Why do computers have problems doing things like 2/10 + 1/10? This is 3/10, but the output is not that, and notice this is isn’t even a repeating decimal. I searched this up, but the websites I found had huge complex theorems and proofs on floating point numbers, and either I didn’t understand the terminology or they did not answer the questions. Why can’t computers store 2/10 and 1/10 correctly, so that the sum in 3/10?