Module:Rational: Difference between revisions

Plumtree (talk | contribs)
m Bugfix
Plumtree (talk | contribs)
m Optimisations for find_S_expression() and is_square_superparticular()
Line 151: Line 151:
local Sk_num = p.pow(p.new(k), 2)
local Sk_num = p.pow(p.new(k), 2)
local Sk_den = p.sub(Sk_num, 1)
local Sk_den = p.mul(k - 1, k + 1)
local Sk = p.div(Sk_num, Sk_den)
local Sk = p.div(Sk_num, Sk_den)
superparticular_ratios[k] = Sk
superparticular_ratios[k] = Sk
Line 645: Line 645:
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 false
return false
end
end
-- check the numerator
-- check the numerator
local k = {sign = 1}
for factor, power in pairs(a) do
for factor, power in pairs(a) do
if type(factor) == 'number' then
if type(factor) == 'number' then
if power > 0 and power % 2 ~= 0 then
if power > 0 and power % 2 ~= 0 then
return false
return false
elseif power > 0 then
k[factor] = math.floor(power / 2 + 0.5)
end
end
end
end
end
end
return p.is_superparticular(a)
-- check the denominator
local den = p.mul(p.add(k, 1), p.sub(k, 1))
return p.eq(a, p.div(p.pow(k, 2), den))
end
end