Every solution I’ve seen is always some method you have to repeat or iterate. But is there some equation I could just plug any number into and get the binary value. For context, I’m trying to do this using the material nodes system in the blender 3D modeling program, which comes with a collection of different math operations. The idea is that I wouldn’t have to change anything depending on the number size, nor have any of my own input. So in short, Is there an explicit non-recursive formula that can be used to convert any decimal number into binary.
-
In short, no there isn't. – TonyK Apr 23 '21 at 22:12
-
You’d probably get a better answer on Stackoverflow. – bubba Apr 23 '21 at 22:43
-
It looks to me as if this is a fundamentally recursive situation, so I don’t see any approach to get what you want. – Lubin Apr 24 '21 at 04:07
1 Answers
I just had a similar problem where I needed to generalize a formula with bit-wise operations expressing everything in whole numbers instead of bits.
In order to make a formula, I took the method from the following link: https://www.rapidtables.com/convert/number/decimal-to-binary.html
Then I wrote it down mathematically in the following way:
$$ a_i = q_{i-1} \% 2 $$
where $a_i$ is the bit of index i, counting from the little end. $q_{i-1}$ is the quotient of the previous division, and % is the modulo operation.
After that I realised that the recursive part lies within the quotients: $$ q_{i} = q_{i-1} / 2 = q_{i-2} / 2^2 = ... $$
Where all the division are integer divisions rounded down.
This shows that the quotients depend on each other recursively, but not on the bits themselves. Hence, we can resolve the recursion, ending up with the following formula:
$$ a_i = (A / 2^i) \% 2 $$
Here, A is the decimal number, i is the current bit counting from the little end to the big end (starting from zero), and $2^i$ is the power of 2 corresponding to that bit. The division is integer division rounded down.
Note that the number A doesn't even have to be a decimal, it can be anything, as long as the arithmetic is operating in the same base as A.
I know this is probably too late for you, but I still wanted to share this.
Have a nice day
-
In order to handle decimal numbers of any arbitrary size, you're still going to have to set up some kind of iterative or recursive procedure to generate all the binary digits, of which there could be ten or a thousand or a googol or more. If we want to bring in practical considerations (such as we're never actually going to be able to print out a googol digits) then the question is how many digits we can actually deal with and are we willing to write out the full closed-form formula for that many digits. – David K Apr 17 '22 at 19:32