Can any positive real be approximated as $2^m/3^n$ with $(m,n)$ large enough?

Conjecture.
There exist positive integers $(m,n)$ large enough, such that for any positive real number $r$ and a given error $\epsilon$ : $$ \left| r - \frac{2^m}{3^n} \right| < \epsilon $$ There is numerical evidence for this conjecture. I have tried $r = \sqrt{2}$ and $\epsilon = 10^{-3}$.
Below is a little Delphi Pascal program with accompanying output.
But .. can somebody prove the conjecture?
program apart;
procedure test(r : double; eps : double); var a : double; m,n : integer; begin a := 1; m := 0; n := 0; while true do begin if a < r then begin m := m + 1; a := a * 2; end else begin n := n + 1; a := a / 3; end; if abs(r-a) < eps then Break; end; Writeln(r,' = 2^',m,'/3^',n,' =',a); end;
begin test(sqrt(2),1.E-3); end.
Output:
 1.41421356237310E+0000 = 2^243/3^153 = 1.41493657935359E+0000
UPDATE.
The answer by lhf does look like a very concise proof. But for me - as an retired physicist by education - it's a bit beyond comprehension.
Furthermore, it leaves a few issues untouched. One might ask for example whether there are estimates for $m$ and $n$ when $r$ and $\epsilon$ are given.

Note. The question can also be formulated as: Can any positive real be approximated as $3^m/2^n$ with $(m,n)$ large enough? Which is the same as allowing negative integers with the original formulation. In this form, it shows some resemblance to the (in)famous Collatz problem.

EDIT.
As suggested by the answers, an approach with logarithms could be more effective:

program anders;
procedure proef(r : double; eps : double); var a,l2,l3,lr : double; m,n : integer; begin l2 := ln(2); l3 := ln(3); lr := ln(r); a := 0; m := 0; n := 0; while true do begin a := m*l2 - n*l3 - lr; if abs(a) < eps then Break; if a < 0 then m := m + 1 else n := n + 1; end; Writeln(r,' = 2^',m,'/3^',n,' =',exp(a)*r); end;
begin proef(sqrt(2),1.E-3); proef(sqrt(2),1.E-9); end.
Output:
 1.41421356237310E+0000 = 2^243/3^153 = 1.41493657935356E+0000
 1.41421356237310E+0000 = 2^911485507/3^575083326 = 1.41421356125035E+0000
The first line in the output is almost identical to the result obtained previously .
The last line in the output shows that the latter approach indeed is more effective.
The error plays the same role in both approaches. Oh well, almost. Let's take a look at the places where the 'Break's are. First program: $$ \left| r - \frac{2^m}{3^n} \right| < \epsilon $$ Second program: $$ -\epsilon < m\ln(2) - n\ln(3) - \ln(r) < +\epsilon \\ \ln(1-\epsilon) < \ln\left(\frac{2^m/3^n}{r}\right) < \ln(1+\epsilon) \\ -\epsilon < \frac{2^m/3^n}{r} - 1 < +\epsilon \\ \left| r - \frac{2^m}{3^n} \right| < \epsilon.r $$ So $\epsilon$ in the first program is an absolute error, while $\epsilon$ in the second program is a relative error.

Continuing story at:
Can the Stern-Brocot tree be employed for better convergence of $2^m/3^n$?


Heuristics of a another proof

Lemma 1.
The fractions $2^m/3^n$ are all between $r/3$ and $2r$.
Proof.
According to the program - as displayed in the question. Any fraction smaller than $r$ is multiplied by $2$, so $r.2$ is an upper bound for these fractions. Any fraction greater than $r$ is divided by $3$, so $r/3$ is a lower bound for these fractions. There can be no other fractions, except when the iterations start. $$ r/3 < \frac{2^m}{3^n} < 2r $$ Lemma 2.
In the sequence $2^m/3^n \to r$ there are no two fractions the same.
Proof.
Suppose that we have $2^{m_1}/3^{n_1} = 2^{m_2}/3^{n_2}$.
Three cases are distinguished:
1. $m_1 \neq m_2$ and $n_1 = n_2$. Then $2^{m_1} = 2^{m_2}$ hence $m_1 = m_2$. Contradiction.
2. $n_1 \neq n_2$ and $m_1 = m_2$. Then $1/3^{n_1} = 1/3^{n_2}$ hence $n_1 = n_2$. Contradiction.
3. $m_1 \neq m_2$ and $n_1 \neq n_2$. Then we have: $$ \ln\left(\frac{2^{m_1}}{3^{n_1}}\right) = \ln\left(\frac{2^{m_2}}{3^{n_2}}\right) \quad \Longrightarrow \\ (m_1-m_2)\ln(2) - (n_1-n_2)\ln(3) = 0 \quad \Longrightarrow \\ \frac{m_1-m_2}{n_1-n_2} = \frac{\ln(3)}{\ln(2)} $$ But $\,\ln(3)/\ln(2)\,$ is not a rational number. Contradiction.

So what we have is a bunch of fractions, all different, but they must fit within the interval $\,]r/3,2r[\,$. This means that the fractions become crowded. Let's make a picture of the iteration process, logarithmic version. The red line is given by $\,\color{red}{\ln(3)y=\ln(2)x-\ln(r)}\,$, small circles are fractions, mapped on a grid $\,m/n \to (m,n)\,$, massively black filled dots are the fractions in the iteration process, while increasing $m$ and $n$ with increments one at a time. The iterations domain is limited by: $\,\color{blue}{-\ln(2)\lt\ln(3)y-\ln(2)x+\ln(r)\lt\ln(3)}\,$. In our case $r = 100$. Mind the sequence at the start.

So it seems that there must be quite some fractions nearby the red line, rerpesenting the real number $r$ in question.
How can we be sure about this? Let's make picture of the crowding of the approximations $a$ in the interval $\,]r/3,2r[\,$, logarithmic scale: $$ a = m\ln(2)-n\ln(3)-\ln(r) \quad \mbox{with} \quad -\ln(3) < a < \ln(2) $$ The red line is where $a = 0$, the desired value.

Further numerical/graphical experiments reveal that the distribution of the fractions seems to be uniform. While seeking further confirmation of this we have done the following, speaking in terms of (Delphi) Pascal:

program opnieuw;
procedure interval(var A,B : double); var h : double; begin A := Random; B := Random; if A > B then begin h := B; B := A; A := h; end; end;
procedure proef(r : double); const veel : integer = 1000000000; var x,l2,l3,lr,A,B : double; m,n,tel,t : integer; begin l2 := ln(2); l3 := ln(3); lr := ln(r); interval(A,B); A := -l3 + A*(l2+l3); B := -l3 + B*(l2+l3); m := 0; n := 0; tel := 0; t := 0; while tel < veel do begin x := m*l2 - n*l3 - lr; if x < 0 then m := m + 1 else n := n + 1; if (-l3 < x) and (x < +l2) then tel := tel + 1; if (A < x) and (x < B) then t := t + 1; end; Writeln((B-A)/(l2+l3),' = ',t/tel); end;
begin Random; Random; proef(1000); proef(0.001); proef(sqrt(2)); proef(1/sqrt(2)); while true do proef(Random); end.
Explanation. Make random intervals $\,]A,B[\,$ inside $\,]-\ln(3),+\ln(2)[\,$. The length of the latter interval is $\,\ln(3)+\ln(2)=\ln(6)\,$, the lenghs of the former are $\,(B-A)\,$. Count the (logarithms $x$ of the) fractions $\,(2^n/3^n)/r\,$ in both intervals. Let $N$ be the total number (tel) of iterands and $n$ be the number (t) of iterands in $\,]A,B[\,$. Then the distribution of the approximations $x$ is uniform if and only if: $$ \lim_{N\to\infty}\frac{n}{N} = \frac{B-A}{\ln(6)} $$ Let's check. Output after a billion iterations each line:
 6.58467502100393E-0001 =  6.58467500000000E-0001
 3.98733151378110E-0001 =  3.98733149000000E-0001
 1.56895805848762E-0001 =  1.56895804000000E-0001
 5.34354087430984E-0002 =  5.34354050000000E-0002
 4.04224734520540E-0001 =  4.04224734000000E-0001
 2.33572337077931E-0001 =  2.33572341000000E-0001
 4.06758418539539E-0001 =  4.06758418000000E-0001
 1.46495995344594E-0001 =  ....
But how can we prove that it is a uniform distribution?