In the past year or two, I have gotten more into running. For whatever reason, I have taken to tracking my distance and pace primarily in kilometers. But if I tell my wife I went for a 11 km run, that’s meaningless to her. So it’s useful to be able to convert between kilometers and miles. Of course, there’s a well-defined way to do this. 1 mile \(\approx\) 1.61 km, and 1 km \(\approx\) 0.62 miles. So if I want to convert my 11 km run to miles, I could just multiply by 0.62 (or divide by 1.61). Because I like mental math, I spend time on some of my runs doing these sorts of calculations. However, for most people, multiplication or division with decimals is not a very friendly procedure – especially while running! In this post, I will tell you a nifty way to (approximately) convert from miles to kilometers (or vice versa) without any multiplication or division. Instead, the method will involve only addition (and the Fibonacci numbers). Let’s do a quick review of the Fibonacci numbers. This is a sequence that starts (conventionally) with two ones. From there, each later term is equal to the sum of the two previous terms, resulting in the following: What does this have to do with converting between miles and kilometers? Many casual runners have run a 5 km (“5K”) race, and know that this is approximately 3 miles. Most of these runners probably do not notice that \(3\) and \(5\) are consecutive Fibonacci numbers. And almost none of them likely know that this pattern continues! Take two copies of the Fibonacci numbers, delete the leading one from the first copy, and line them up on top of each other to get the following: What this table says is that 3 miles is approximately 5 km, 5 miles is approximately 8 km, 8 miles is approximately 13 km, and so on. Let’s compare this to some exact values. When approximating 1 and 2 km, we get substantial error. This is unavoidable, as we are trying to approximate an integer number of kilometers with an integer number of miles, and there’s only so precise that can be. But starting at 3 km, the approximation is pretty good! Unfortunately, the table above doesn’t include all integer values. How do I convert my 11 km run to miles? I could avoid this problem by only doing training runs whose length in kilometers is a Fibonacci number. But in addition to constraining my training plan, this strategy isn’t always viable. For example, a marathon is approximately 26 miles, and I’m not going to be able to convince the organizers to make it 21 miles or 34 miles instead. How do I convert 26 miles to kilometers, given that 26 doesn’t appear in the table above? \[\begin{alignat*}{4}
26 \text{ miles } & = 21 \text{ miles } & & + 5 \text{ miles } \\
& \approx 34 \text{ kilometers } & & + 8 \text{ kilometers } & = 42 \text{ kilometers} \\
\\
11 \text{ kilometers } & = 8 \text{ kilometers } & & + 3 \text{ kilometers } \\
& \approx 5 \text{ miles } & & + 2 \text{ miles } & = 7 \text{ miles}
\end{alignat*}\]
The second example shows how the same technique can convert my 11 km training run to miles. Doing the exact calculations, 26 miles is 41.84 km, and 11 km is 6.84 miles. So we’re off by a bit, but not too much. In fact, every positive integer can be written as a sum of Fibonacci numbers, with no repeats (if we could repeat, we could just write every number as 1 + 1 + 1 + …). This is known as Zeckendorf’s theorem.1 What this means is that you can use the Fibonacci technique to approximately convert any integer number of kilometers to miles, and vice versa. Because we are mapping integers to integers, some error is unavoidable. But if I use this method to map all of the distances from 1 km to 50 km into approximate miles, the only cases where I don’t get the best integer approximation are 4 km (which is 2.49 miles but gets mapped to 3 miles) and 12 km (which is 7.46 miles, but gets mapped to 8 miles). In both of these cases, the method ends up using the approximation 1 km \(\approx\) 1 mile, which isn’t very good. If we just decided to map 1 km to 0.6 miles, we would be much closer. As mentioned earlier, one mile is approximately 1.61 km. So to convert from miles to kilometers, I should be multiplying by \(1.61\). Instead, what I am doing is replacing one Fibonacci number \(F_{n}\) with the next larger one \(F_{n+1}\). Why is that similar? It turns out that the ratio of consecutive Fibonacci numbers \(F_{n+1}/F_{n}\) converges very quickly to the golden ratio \((1+\sqrt{5})/2 \approx 1.618\). Since this is very close to 1.61 (it’s about 0.5% larger), “moving up one Fibonacci number” is an excellent approximation for “multiplying by 1.61”. The same works in reverse: “moving down one Fibonacci number” is a good approximation to “dividing by 1.61”. There are two more mini-mysteries: I can’t help with the first one, but I’ll take a stab at the second. Consider the ratio of \(F_{n+1}/F_n\). Clearly, this is bigger than one (the Fibonacci numbers are increasing). But it’s also clearly less than two, as \(F_{n+1} = F_{n} + F_{n-1} < 2 F_n\). So the ratio between consecutive Fibonacci numbers is always between one and two. Now let’s suppose that this ratio converges to some value \(r > 1\), meaning that \(F_{n+1} \approx r F_{n}\) and \(F_n \approx r F_{n-1}\). Then we get that \[\begin{align*}
F_{n+1} & \approx r F_{n} \approx r^2 F_{n-1}.\\
F_{n+1} & = F_{n} + F_{n-1} \approx r F_{n-1} + F_{n-1} = (r+1) F_{n-1}.
\end{align*}\]
Setting these equal to each other, we get that \(r^2 F_{n-1} \approx (r+1) F_{n-1}\), which can be rearranged into the equation \((r^2 - r - 1)F_{n-1}= 0\). Since \(F_{n-1}\) is not zero, the first term must be. If you remember the quadratic formula, it will tell you that the roots of this equation are \(\frac{1 \pm \sqrt{5}}2\), and only the positive root makes sense in this context. (If you want a rigorous treatment of the relationship between the Fibonacci numbers and the golden ratio, this has been very extensively studied and is available with a quick query to your favorite search engine or AI tool). The decomposition is unique if we add the constraint that we do not include any two consecutive Fibonacci numbers (if we do have consecutive Fibonacci numbers, we can replace them with their sum, which is also a Fibonacci number). But for our purposes in this post, uniqueness is not important.↩︎The Method
Calculation
NA
NA
1+1
1+2
2+3
3+5
5+8
8+13
13+21
21+34
Fibonacci
1
1
2
3
5
8
13
21
34
55
Kilometers (km)
1
2
3
5
8
13
21
34
55
89
Miles (mi)
1
1
2
3
5
8
13
21
34
55
Kilometers (km)
1
2
3
5
8
13
21
34
55
89
Miles (mi)
0.62
1.24
1.86
3.11
4.97
8.08
13.05
21.13
34.18
55.30
Converting Non-Fibonacci Numbers
Why does it work?