diff options
Diffstat (limited to 'src/algebra')
-rw-r--r-- | src/algebra/float.spad.pamphlet | 5 | ||||
-rw-r--r-- | src/algebra/fraction.spad.pamphlet | 2 | ||||
-rw-r--r-- | src/algebra/polycat.spad.pamphlet | 8 |
3 files changed, 11 insertions, 4 deletions
diff --git a/src/algebra/float.spad.pamphlet b/src/algebra/float.spad.pamphlet index 26c0c253..7c5a74ae 100644 --- a/src/algebra/float.spad.pamphlet +++ b/src/algebra/float.spad.pamphlet @@ -423,7 +423,10 @@ Float(): p := bits(); inc 5 -- apply log(x) = n log 2 + log(x/2**n) so that 1/2 < x < 2 if negative?(n := order x) then n := n+1 - l := if n = 0 then 0 else (x := shift(x,-n); n * log2()) + l: % := + n = 0 => 0 + x := shift(x,-n) + n * log2() -- speed the series convergence by finding m and k such that -- | exp(m/2**k) x - 1 | < 1 / 2 ** O(sqrt p) -- write log(exp(m/2**k) x) as m/2**k + log x diff --git a/src/algebra/fraction.spad.pamphlet b/src/algebra/fraction.spad.pamphlet index 6fecb082..f7d5d6e0 100644 --- a/src/algebra/fraction.spad.pamphlet +++ b/src/algebra/fraction.spad.pamphlet @@ -543,7 +543,7 @@ Fraction(S: IntegralDomain): QuotientFieldCategory S with makeFR(map(#1::%/den1,unit(ff)),lfact) factorSquareFreePolynomial(pp) == zero? pp => 0 - degree pp = 0 => makeFR(pp,empty()) + zero? degree pp => makeFR(pp,empty()) lcpp:=leadingCoefficient pp pp:=pp/lcpp denpp:="lcm"/[denom u for u in coefficients pp] diff --git a/src/algebra/polycat.spad.pamphlet b/src/algebra/polycat.spad.pamphlet index 4347438f..b56c9a97 100644 --- a/src/algebra/polycat.spad.pamphlet +++ b/src/algebra/polycat.spad.pamphlet @@ -142,7 +142,10 @@ FiniteAbelianMonoidRing(R:Ring, E:OrderedAbelianMonoid): Category == bincoef: Integer powl: List(%):= [x] for i in 2..nn repeat powl:=[x * powl.first, :powl] - yn:=y; ans:=powl.first; i:=1; bincoef:=nn + yn := y + ans := powl.first + i: Integer := 1 + bincoef := nn for xn in powl.rest repeat ans:= bincoef * xn * yn + ans bincoef:= (nn-i) * bincoef quo (i+1); i:= i+1 @@ -918,7 +921,8 @@ UnivariatePolynomialCategory(R:Ring): Category == - pseudoRemainder(p, q)) exquo q)::% pseudoDivide(p, q) == - (n := degree(p)::Integer - degree q + 1) < 1 => [1, 0, p] + n: Integer := degree(p)::Integer - degree q + 1 + n < 1 => [1, 0, p] prem := pseudoRemainder(p, q) lc := leadingCoefficient(q)**(n::NonNegativeInteger) [lc,((lc*p - prem) exquo q)::%, prem] |