Minkowski question-mark function: Difference between revisions
Content added Content deleted
m (added whitespace.) |
Alextretyak (talk | contribs) (Added 11l) |
||
Line 26: | Line 26: | ||
<br><br> |
<br><br> |
||
=={{header|11l}}== |
|||
{{trans|Python}} |
|||
<lang 11l>-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))))</lang> |
|||
{{out}} |
|||
<pre> |
|||
1.6666666666696983 1.6666666666666667 |
|||
-0.5657414540893350 -0.5657414540893351 |
|||
0.7182818280000091 0.1213141516171819 |
|||
</pre> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |