diff --git a/examples/plot/test-small-plot.cir b/examples/plot/test-small-plot.cir new file mode 100644 index 000000000..fb8ec1202 --- /dev/null +++ b/examples/plot/test-small-plot.cir @@ -0,0 +1,116 @@ +resolution test for plotting +.control +let xvar = vector(4) +let yvar = vector(4) + +* -------------------- +* integer +let yvar[0] = 1.0 +let yvar[1] = 1.0 +let yvar[2] = 1.0 +let yvar[3] = 1.0 + +plot yvar vs xvar title integer 1 + +* -------------------- +* 14 digits +let yvar[0] = 1.0 +let yvar[1] = 1.00000000000001 +let yvar[2] = 0.99999999999999 +let yvar[3] = 1.0 + +plot yvar vs xvar title '14 digits' + +* -------------------- +* 15 digits +let yvar[0] = 1.0 +let yvar[1] = 1.000000000000001 +let yvar[2] = 0.999999999999999 +let yvar[3] = 1.0 + +plot yvar vs xvar title '15 digits' + +* -------------------- +* 16 digits +let yvar[0] = 1.0 +let yvar[1] = 1.0000000000000001 +let yvar[2] = 0.9999999999999999 +let yvar[3] = 1.0 + +plot yvar vs xvar title '16 digits' + +* -------------------- +* 14 digits plus exponent +let yvar[0] = 1.0e-14 +let yvar[1] = 1.00000000000001e-14 +let yvar[2] = 0.99999999999999e-14 +let yvar[3] = 1.0e-14 + +plot yvar vs xvar title '14 digits plus exponent' + +* -------------------- +* 15 digits plus exponent +let yvar[0] = 1.0e-14 +let yvar[1] = 1.000000000000001e-14 +let yvar[2] = 0.999999999999999e-14 +let yvar[3] = 1.0e-14 + +plot yvar vs xvar title '15 digits plus exponent' + +* -------------------- +* 16 digits plus exponent +let yvar[0] = 1.0e-14 +let yvar[1] = 1.0000000000000001e-14 +let yvar[2] = 0.9999999999999999e-14 +let yvar[3] = 1.0e-14 + +plot yvar vs xvar title '16 digits plus exponent' + +* -------------------- +* negative 14 digits plus exponent +let yvar[0] = -1.0e-14 +let yvar[1] = -1.00000000000001e-14 +let yvar[2] = -0.99999999999999e-14 +let yvar[3] = -1.0e-14 + +plot yvar vs xvar title 'neg 14 digits plus exponent' + +* -------------------- +* negative 15 digits plus exponent +let yvar[0] = -1.0e-14 +let yvar[1] = -1.000000000000001e-14 +let yvar[2] = -0.999999999999999e-14 +let yvar[3] = -1.0e-14 + +plot yvar vs xvar title 'neg 15 digits plus exponent' + +* -------------------- +* negative 16 digits plus exponent +let yvar[0] = -1.0e-14 +let yvar[1] = -1.0000000000000001e-14 +let yvar[2] = -0.9999999999999999e-14 +let yvar[3] = -1.0e-14 + +plot yvar vs xvar title 'neg 16 digits plus exponent' + +* -------------------- +* 15 digits plus big exponent +let yvar[0] = 1.0e-200 +let yvar[1] = 1.000000000000001e-200 +let yvar[2] = 0.999999999999999e-200 +let yvar[3] = 1.0e-200 + +plot yvar vs xvar title '15 digits plus big exponent' + +* -------------------- +* negative 15 digits plus big exponent +let yvar[0] = -1.0e-200 +let yvar[1] = -1.000000000000001e-200 +let yvar[2] = -0.999999999999999e-200 +let yvar[3] = -1.0e-200 + +plot yvar vs xvar title 'neg 15 digits plus big exponent' + +.endc + +.end diff --git a/src/frontend/plotting/grid.c b/src/frontend/plotting/grid.c index 3b3420587..c7f1bacbf 100644 --- a/src/frontend/plotting/grid.c +++ b/src/frontend/plotting/grid.c @@ -365,10 +365,10 @@ lingrid(GRAPH *graph, double lo, double hi, double delta, int type, Axis axis) buf[0] = '\0'; } - if ((s = ft_typabbrev(type)) != NULL) - (void) strncat(buf, s, sizeof(buf) - strlen(buf) - 1); - else - (void) strncat(buf, "Units", sizeof(buf) - strlen(buf) - 1); + s = ft_typabbrev(type); + if (!s) + s = "Units"; + strncat(buf, s, sizeof(buf) - strlen(buf) - 1); if (delta == 0.0) { int i; @@ -527,7 +527,7 @@ drawlingrid(GRAPH *graph, char *units, int spacing, int nsp, double dst, double if (j == 0) SetLinestyle(1); - (void) sprintf(buf, "%.*f", digits + 1, m * mag / 100.0); + snprintf(buf, sizeof(buf), "%.*f", digits + 1, m * mag / 100.0); if (axis == x_axis) DevDrawText(buf, graph->viewportxoff + i - @@ -629,10 +629,12 @@ loggrid(GRAPH *graph, double lo, double hi, int type, Axis axis) dd[0] = pow(10.0, (double) lmt); dd[1] = pow(10.0, (double) hmt); - if ((s = ft_typabbrev(type)) != NULL) - (void) strcpy(buf, s); - else - (void) strcpy(buf, "Units"); + buf[0] = '\0'; + + s = ft_typabbrev(type); + if (!s) + s = "Units"; + strncat(buf, s, sizeof(buf) - strlen(buf) - 1); if (axis == x_axis) { (void) strcpy(graph->grid.xaxis.log.units, buf); diff --git a/src/include/ngspice/graph.h b/src/include/ngspice/graph.h index 16149da14..02cdb0e0d 100644 --- a/src/include/ngspice/graph.h +++ b/src/include/ngspice/graph.h @@ -17,7 +17,7 @@ Author: 1988 Jeffrey M. Hsu struct _keyed; -#define GRAPH_UNITS_LENGTH 16 +#define GRAPH_UNITS_LENGTH 20 /* Device-independent data structure for plots. */