In decimal (base 10), 1/3
can only be approximated to 0.33333 repeating.
What number is the equivalent in binary that can only be represented as an app
The same set of numbers that can't be exactly represented by base 10 can't exactly be represented by base 2. There shouldn't be a difference there.
The numbers that can be exactly represented in base 2 are the dyadic rationals. These are numbers that can be written in the form k/2^n for some integer k and whole number n. Any number that cannot be written in that form will have a non-terminating representation in base 2.
However, you seem to be asking not about what numbers are representable in base 2, but rather what numbers are representable in some fixed floating-point type, such as float
or double
. This is a more subtle question; any number that is not a dyadic rational cannot be represented, but not all dyadic rationals can be represented either.
I'm going to take a stab at infinity
0.1 is one such example, as well as 0.2
This question is also similar to this other SO question, which already has very good answers.
It's every number that can't be expressed as k/2^n for integer k and whole number n.
The easy way to find all these numbers is to write down some prime numbers that do not include 2. 3, 5, 7, 11, 13, 17 and 19 are good examples of prime numbers that don't include 2.
Start multiplying. 1/3, 2/3, 1/5, 2/5, 3/5, 4/5, 1/6, 5/6, 1/7, 2/7, etc.
if you do this -- and you avoid numbers of the form k/2^n -- you'll enumerate every possible fraction that cannot be exactly represented in binary.
You should probably stop enumerating when you get to numbers for which the left-most 64-bits are all identical.
binary(.00011001100110011...) == decimal(.1)