Module:Rational: Difference between revisions

Plumtree (talk | contribs)
mNo edit summary
Plumtree (talk | contribs)
m hz() implemented
Line 1,050: Line 1,050:
end
end
return n_factors <= 1 and m_factors <= 1
return n_factors <= 1 and m_factors <= 1
end
-- convert a rational number (interpreted as an interval) into Hz
function p.hz(a, base)
base = base or 440
if type(a) == 'number' then
a = p.new(a)
end
if a.nan or a.inf or a.sign < 0 then
return nil
end
if a.zero then
return 0
end
local log_hz = math.log(base)
for factor, power in pairs(a) do
if type(factor) == 'number' then
log_hz = log_hz + power * math.log(factor)
end
end
return math.exp(log_hz)
end
end


Line 1,057: Line 1,078:
a = p.new(a)
a = p.new(a)
end
end
if a.nan or a.inf or a.zero then
if a.nan or a.inf or a.zero or a.sign < 0 then
return nil
end
if a.sign < 0 then
return nil
return nil
end
end