Ilya Zakharevich on Fri, 9 Oct 1998 18:41:24 -0400 (EDT) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Improved variant of patch to plot() (fwd) |
ilya writes: Here is the improved variant of the improved variant! (Sorry for a duplicate mail I sent a couple of minutes ago). With sin(x^3)/3^-300 you get 7.31e-144 |'_x'''''''''x'''''''x'''''''''''''''''"''''"''''''''_'''''''''| | :: ": _: xx x : : : " | |: : :: :: :: ": : : __ : : | |: " : : : : :: :: : : :: :: : _ | |x : : : : : :: :: : : :: :: :: :: :" | |: : : " : : : : :: : : : : :: :: :: :: | |: : " : : _ : : : : : : : : :: _: :: :: | : : : : : : : : : : " x x : :: : : ": :: | : x : : _ : : : : : : : : : :: : : :: :: | x : : : : : _ _ : : : : : " : : : : : : :: | | : : : : : : : : : : : : : : : : : : : :: | ``````:```:````:```:```:``:``:``:``"``:`:``:`:`:``:`:`:`:`::`:`` | : : : : : : : x : : : : : : : : : : :: :| | : x " : : : : : : : :: : : :: : : :: :| | _ : : : : : : : : : :: : : :: x: :: :" | : : : : _ : : : : : :: :: :: :: :: :: | : : : : : : : : :: :: :_ _: :: ": :: | : : : " : : :: :: :: :: :: :: :: :| | : : : : :: :: :_ :: :: : : : :| | : x _: :" x: : x_ : : : _ :| | " : : : _ : x : x| -7.3e-144 |......._........_......x......".............."........".......| 2.333333 4.333333 (This - -7.3e-144 - is the worst significant-digits lossage I can imagine for a 9-chars field). Enjoy, Ilya --- pari-2.0.11.beta/src/graph/plotport.c~ Thu Oct 8 02:10:20 1998 +++ pari-2.0.11.beta/src/graph/plotport.c Fri Oct 9 18:37:25 1998 @@ -47,15 +47,29 @@ PARI_plot pari_plot, pari_psplot; #define XX_LOWER '.' #define FF1 '_' #define FF2 'x' -#define FF3 '*' +#define FF3 '"' #define PICT(j) ((j) % 3 ? ((j) % 3 == 2 ? FF3 : FF2) : FF1) +static char * +dsprintf9(double d, char *buf) +{ + int i = 10; + + while (--i >= 0) { + sprintf(buf, "%9.*g", i, d); + if (strlen(buf) <= 9) + return buf; + } + return buf; /* Should not happen? */ +} + void plot(entree *ep, GEN a, GEN b, char *ch) { long av = avma, av2,limite,jz,j,i,sig; GEN p1,p2,ysml,ybig,x,diff,dyj,dx,y[ISCR+1]; - char scr[ISCR+1][JSCR+1], z; + char scr[ISCR+1][JSCR+1], z, jprev, jnew; + char buf[80]; sig=gcmp(b,a); if (!sig) return; if (sig<0) { x=a; a=b; b=x; } @@ -94,10 +108,39 @@ plot(entree *ep, GEN a, GEN b, char *ch) for (i=1; i<=ISCR; i++) { scr[i][jz]=z; j=3+gtolong(gmul(gsub(y[i],ysml),dyj)); - scr[i][j/3] = PICT(j); avma=av2; + jnew = j/3; + if (i > 1) { + int i_up, i_down, mid = (jprev + jnew)/2, up, down; + int domid = 0, jmid; + + /* If the gap is 1, leave it as it is. */ + if (jprev < jnew - 2) { + i_up = i; + i_down = i - 1; + up = jnew - 1; + down = jprev + 1; + domid = 1; + } else if (jnew < jprev - 2) { + i_up = i - 1; + i_down = i; + down = jnew + 1; + up = jprev - 1; + domid = 1; + } + if (domid) { + while (down <= mid) { + scr[i_down][down++] = ':'; + } + while (up > mid) { + scr[i_up][up--] = ':'; + } + } + } + scr[i][jnew] = PICT(j); avma=av2; + jprev = jnew; } p1=cgetr(3); gaffect(ybig,p1); pariputc('\n'); - pariputsf(" %8.3e",rtodbl(p1)); + pariputsf("%s ", dsprintf9(rtodbl(p1), buf)); for (i=1; i<=ISCR; i++) pariputc(scr[i][JSCR]); pariputc('\n'); for (j=(JSCR-1); j>=2; j--) @@ -107,12 +150,12 @@ plot(entree *ep, GEN a, GEN b, char *ch) pariputc('\n'); } p1=cgetr(3); gaffect(ysml,p1); - pariputsf("%8.3e",rtodbl(p1)); + pariputsf("%s ", dsprintf9(rtodbl(p1), buf)); for (i=1; i<=ISCR; i++) pariputc(scr[i][1]); pariputc('\n'); p1=cgetr(3); gaffect(a,p1); p2=cgetr(3); gaffect(b,p2); - pariputsf("%8s %8.3e %44s %8.3e\n"," ",rtodbl(p1)," ",rtodbl(p2)); + pariputsf("%10s%-9.7g%*.7g\n"," ",rtodbl(p1),ISCR-9,rtodbl(p2)); pop_val(ep); avma=av; }