-
Notifications
You must be signed in to change notification settings - Fork 1
/
IPRIST.c,v
61 lines (47 loc) · 1.2 KB
/
IPRIST.c,v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
head 1.1;
access;
symbols;
locks
saclib:1.1; strict;
comment @ * @;
1.1
date 94.04.26.18.59.37; author Jeremy; state new;
branches;
next ;
desc
@Integral polynomial real root isolation using a Sturm sequence.
@
1.1
log
@Initial revision
@
text
@/*===========================================================================
L <- IPRIST(A)
Integral polynomial real root isolation using a Sturm sequence.
Inputs
A : in Z[X], non-zero, squarefree.
Outputs
L : a list (I_1,...,I_r) of isolating intervals for all of
the real roots of A with I_1 < I_2 < ... < I_r.
Each I_j is a left-open right-closed binary rational interval.
===========================================================================*/
#include "saclib.h"
Word IPRIST(A)
Word A;
{
Word L,Ap,Ab,S,b,v_1,v_2;
Step1: /* Compute primitive Sturm sequence. */
Ab = IPIPP(1,A);
Ap = IPIPP(1,IPDMV(1,Ab));
S = IPPNPRS(Ab,Ap);
Step2: /* Compute root bound. */
b = IUPRB(Ab);
Step3: /* Search for isolating intervals. */
v_1 = VAR(IPLEV(S,RNNEG(b)));
v_2 = VAR(IPLEV(S,b));
L = IPIISS(S,RNNEG(b),b,v_1,v_2);
Return: /* Prepare for return. */
return(L);
}
@