Module:Rational: Difference between revisions
m Bugfix |
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. | 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. | -- 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 | ||