RosettaCodeData/Task/Minkowski-question-mark-function/Julia/minkowski-question-mark-function.jl
2026-02-01 16:33:20 -08:00

28 lines
677 B
Julia

function questionmark(x)
y, p = fldmod(x, 1)
q, d = 1 - p, .5
while y + d > y
p < q ? (q -= p) : (p -= q; y += d)
d /= 2
end
y
end
function questionmark_inv(x)
y, bits = fldmod(x, 1)
lo, hi = [0, 1], [1, 1]
while bits 0
bits, bit = modf(2bits)
bit 1 ? (lo .+= hi) : (hi .+= lo)
end
y + /(lo...)
end
x, y = 0.7182818281828, 0.1213141516171819
for (a, b) [
(5/3, questionmark((1 + 5)/2)),
((13-7)/6, questionmark_inv(-5/9)),
(x, questionmark_inv(questionmark(x))),
(y, questionmark(questionmark_inv(y)))]
println(a, a b ? "" : " != ", b)
end