Skip to content

Instantly share code, notes, and snippets.

@larsch
Last active March 21, 2018 13:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save larsch/288e1dc9120196522840aa8c0c36d84e to your computer and use it in GitHub Desktop.
Save larsch/288e1dc9120196522840aa8c0c36d84e to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
def lesseq(a, b, c, d)
return a * d <= c * b
end
lower_numer = 2
lower_denom = 1
upper_numer = 3
upper_denom = 1
step = 0
loop do
left_numer = 0
left_denom = 1
right_numer = 1
right_denom = 0
loop do
mediant_numer = left_numer + right_numer
mediant_denom = left_denom + right_denom
if lesseq(mediant_numer, mediant_denom, lower_numer, lower_denom)
left_numer = mediant_numer
left_denom = mediant_denom
elsif lesseq(upper_numer, upper_denom, mediant_numer, mediant_denom)
right_numer = mediant_numer
right_denom = mediant_denom
else
puts "#{step} #{mediant_numer}/#{mediant_denom} #{mediant_numer.to_f/mediant_denom.to_f}"
# Alternate between inserting above/below
if step % 2 == 0
lower_numer = mediant_numer
lower_denom = mediant_denom
else
upper_numer = mediant_numer
upper_denom = mediant_denom
end
step += 1
break
end
# Stop if numerator/denominator exceeds 32 bits
exit if Math.log2(mediant_numer) >= 32
exit if Math.log2(mediant_denom) >= 32
end
end
0 5/2 2.5
1 8/3 2.6666666666666665
2 13/5 2.6
3 21/8 2.625
4 34/13 2.6153846153846154
5 55/21 2.619047619047619
6 89/34 2.6176470588235294
7 144/55 2.618181818181818
8 233/89 2.6179775280898876
9 377/144 2.6180555555555554
10 610/233 2.6180257510729614
11 987/377 2.618037135278515
12 1597/610 2.6180327868852458
13 2584/987 2.6180344478216817
14 4181/1597 2.618033813400125
15 6765/2584 2.6180340557275543
16 10946/4181 2.6180339631667064
17 17711/6765 2.6180339985218035
18 28657/10946 2.618033985017358
19 46368/17711 2.618033990175597
20 75025/28657 2.618033988205325
21 121393/46368 2.618033988957902
22 196418/75025 2.6180339886704433
23 317811/121393 2.6180339887802426
24 514229/196418 2.618033988738303
25 832040/317811 2.6180339887543225
26 1346269/514229 2.618033988748204
27 2178309/832040 2.618033988750541
28 3524578/1346269 2.618033988749648
29 5702887/2178309 2.618033988749989
30 9227465/3524578 2.618033988749859
31 14930352/5702887 2.6180339887499087
32 24157817/9227465 2.6180339887498896
33 39088169/14930352 2.6180339887498967
34 63245986/24157817 2.618033988749894
35 102334155/39088169 2.6180339887498953
36 165580141/63245986 2.618033988749895
37 267914296/102334155 2.618033988749895
38 433494437/165580141 2.618033988749895
39 701408733/267914296 2.618033988749895
40 1134903170/433494437 2.618033988749895
41 1836311903/701408733 2.618033988749895
42 2971215073/1134903170 2.618033988749895
43 4807526976/1836311903 2.618033988749895
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment