Module:Rational: Difference between revisions

Plumtree (talk | contribs)
m find_S_expression() reworked
Plumtree (talk | contribs)
m as_FJS() changed
Line 1,012: Line 1,012:
table.sort(otonal)
table.sort(otonal)
table.sort(utonal)
table.sort(utonal)
local fifths = b[3] or 0
local fifths = b[3] or 0
if fifths % 7 == 6 then
local o = math.floor((fifths * 2 + 3) / 7)
b = p.div(b, red(p.new(2, 3)))
local num = fifths * 11 + (b[2] or 0) * 7
if num >= 0 then
num = num + 1
else
else
b = p.div(b, red(p.pow(p.new(3, 2), fifths % 7)))
num = num - 1
o = -o
end
end
b = p.div(b, p.pow(p.new(2187, 2048), math.floor((fifths + 1) / 7)))
local octaves = b[2] or 0
local num_mod = (num - u.signum(num)) % 7
local letter = ''
local noshift = {1, 5, 2, 6, 3, 7, 4}
if (num_mod == 0 or num_mod == 3 or num_mod == 4) and o == 0 then
local base_num = noshift[1 + (fifths % 7)]
letter = 'P'
local num = base_num + octaves * 7
elseif o == 1 then
if octaves < 0 then
fifths = -fifths
octaves = -octaves - 1
base_num = (8 - base_num) % 7 + 1
num = -base_num - octaves * 7
end
local letter = 'P'
if fifths >= 2 and fifths <= 5 then
letter = 'M'
letter = 'M'
elseif fifths <= -2 and fifths >= -5 then
elseif o == -1 then
letter = 'm'
letter = 'm'
elseif fifths > 5 then
else
letter = ''
if o >= 0 then
while fifths > 5 do
o = o - 1
letter = letter .. 'A'
else
fifths = fifths - 7
o = o + 1
end
end
elseif fifths < -5 then
if o > 0 then
letter = ''
while o > 0 do
while fifths < -5 do
letter = letter .. 'A'
letter = letter .. 'd'
o = o - 2
fifths = fifths + 7
end
else
while o < 0 do
letter = letter .. 'd'
o = o + 2
end
end
end
end
end