91 lines
1.6 KiB
Plaintext
91 lines
1.6 KiB
Plaintext
-V MAXITER = 151
|
||
|
||
F minkowski(x) -> Float
|
||
I x > 1 | x < 0
|
||
R floor(x) + minkowski(x - floor(x))
|
||
|
||
V p = Int(x)
|
||
V q = 1
|
||
V r = p + 1
|
||
V s = 1
|
||
V d = 1.0
|
||
V y = Float(p)
|
||
|
||
L
|
||
d /= 2
|
||
I y + d == y
|
||
L.break
|
||
|
||
V m = p + r
|
||
I m < 0 | p < 0
|
||
L.break
|
||
|
||
V n = q + s
|
||
I n < 0
|
||
L.break
|
||
|
||
I x < Float(m) / n
|
||
r = m
|
||
s = n
|
||
E
|
||
y += d
|
||
p = m
|
||
q = n
|
||
|
||
R y + d
|
||
|
||
F minkowski_inv(=x) -> Float
|
||
I x > 1 | x < 0
|
||
R floor(x) + minkowski_inv(x - floor(x))
|
||
|
||
I x == 1 | x == 0
|
||
R x
|
||
|
||
V cont_frac = [0]
|
||
V current = 0
|
||
V count = 1
|
||
V i = 0
|
||
|
||
L
|
||
x *= 2
|
||
|
||
I current == 0
|
||
I x < 1
|
||
count++
|
||
E
|
||
cont_frac.append(0)
|
||
cont_frac[i] = count
|
||
|
||
i++
|
||
count = 1
|
||
current = 1
|
||
x--
|
||
E
|
||
I x > 1
|
||
count++
|
||
x--
|
||
E
|
||
cont_frac.append(0)
|
||
cont_frac[i] = count
|
||
|
||
i++
|
||
count = 1
|
||
current = 0
|
||
|
||
I x == floor(x)
|
||
cont_frac[i] = count
|
||
L.break
|
||
|
||
I i == :MAXITER
|
||
L.break
|
||
|
||
V ret = 1.0 / cont_frac[i]
|
||
L(j) (i-1 .. 0).step(-1)
|
||
ret = cont_frac[j] + 1.0 / ret
|
||
|
||
R 1.0 / ret
|
||
|
||
print(‘#2.16 #2.16’.format(minkowski(0.5 * (1 + sqrt(5))), 5.0 / 3.0))
|
||
print(‘#2.16 #2.16’.format(minkowski_inv(-5.0 / 9.0), (sqrt(13) - 7) / 6))
|
||
print(‘#2.16 #2.16’.format(minkowski(minkowski_inv(0.718281828)), minkowski_inv(minkowski(0.1213141516171819))))
|