Graphmatica Bug reports
If you're seeing behavior you think is a bug, please check the known bugs below (and download the
fix if applicable) before you email me.
Known bugs
-
Bug 104: Curve-fit inaccurate if includes point with x=0
Symptom: Attempted linear fit for data set including 0,4 resulted in premature covergence at an incorrect solution.
Cause: It appears that the value x=0 somehow resulted in incorrect partial differential computation. CurveExpert does not seem susceptible to this because it has a special case algorithm for linear/polynomial regression (not Levenberg-Marquardt).
Workaround: Leaving out the x=0 value or substituting a nearly-zero number works fine.
Status: Not worked on yet.
-
Bug 102: Cannot graph x^3 + y^3 = a * x * y {a: 1, 7, 1}
Symptom: This equation won't parse due to use of 'a' in implicit function.
Cause: Can't use the free variable 'a' in implicit functions due to limitations for calculating/storing initial values, lack of loop to advance value of 'a' around theODE approximation graphing routine.
Workaround: enter separate equations for all desired values of "a" manually
Status: Not worked on yet.
-
Bug 100: sin(x) < sin(y) shading incorrect at domain -60,60
Symptom: upper half of graph should be shaded, but lower corner tests positive at large enough scale resulting in odd diagonal artifact
Cause: sin(y) is evaluated by taking arcsin of both sides. The domain of this function is limited and behavior outside of that domain is unpredictable.
Workaround: None
Status: Not worked on yet.
-
E/R 99: Handle equations like f(x)=...x...
Request: Want to be able to enter equations using f(x)= instead of y=
Issue: The equation parser treats expressions like f(x) as a function call with x as the parameter. Would have to make this a reserved expression to enable this behavior.
Status: Not worked on yet.
-
Bug 97: Incorrect vertical segments drawn for high-frequency sec/csc curves
Symptom: High-frequency sections of sec/csc graphs like Y= sec (1+1/x) and Y= csc (1-1/x^2) can inappropriately connect points below -1 and above 1 so that it looks like the graph is defined there, although this is physically impossible.
Cause: To speed up drawing, Graphmatica calculates points only every 2-3 pixels and "connects the dots" with line segments. Although there are numerous checks to prevent discontinuous segments of the graph from being connected, they seem to be inadequate to catch this case.
Workaround: draw graph with points only at high enough fineness factor that the points blend together, without the program drawing lines between them.
Status: Not worked on yet.
-
Bug 96: "Bad variable" displayed, vertical segments missed on implicit graphs
Symptom: y^7-y^5=(cot x)^7-(sin x)^3 displays the message "Your equation included a variable or function that Graphmatica does not support, or you mis-typed a function name. Please edit your equation and try again.") and skips near-vertical segments
Cause: The ODE approximation inputs are overflowing and this triggers the check for undefined variables. Presumably the approximation has completely lost precision at this point, so it should trigger an evaluation warning, but not a parse error.
Workaround: Avoid drawing segments of graphs that are too close to vertical.
Status: Not worked on yet.
-
Bug 90: abs(x-y)>x shades incorrectly
Symptom: Misses two corners, so shading crosses graph instead of staying within the bounds.
Cause: Unknown.
Workaround: None.
Status: Not worked on yet.
-
Bug 89: derviatives of trig functions in degrees mode multiplied by unwanted 'd'
Symptom: When a trig function is written in degrees: y = sin (x * d),
and then you take the derivative, the solution is incorrect: y' = cos (x * d ) * d
instead of y' = cos (x * d)
Cause: Graphmatica performs the chain rule as it would on any argument to a function, although it is inappropriate here because the conversion factor from degrees to radians should be treated as part of the trig function, not the argument
Workaround: Use radians
Status: Not worked on yet, but a comprehensive "degrees mode" is on the drawing board for the next version.
-
Bug 68: Graph of x=abs(y^2) incomplete
Symptom: Only top half of curve drawn.
Cause: The parser favors solving for y instead of x. It should favor solving for x if there is one instance of each variable and solving for y requires inverting the abs function.
Workaround: You can force the program to evaluate an equation with only one "x" as a function of y by appending "+ y - y" to it. This makes it impossible to isolate y, but does not
change the solution of the equation.
Status: Not worked on yet.
-
Bug 56: Mouse cursor disappears while moving
Symptom: When you move the mouse pointer onto the graph it seems to disappear. In fact it changes to a nice black cross - but this is only visible when the mouse is not moving, somewhat disconcerting.
Cause: Unknown. Possibly quirk of user's mouse driver (Genius optical mouse) on Win98 SE
Workaround: Turn on the coordinate cursor
Status: Cannot reproduce this locally. Please let me know if it happens to you.
Fixed bugs
-
Bug 106: implicit curves with multiple values display incorrectly in point eval
Symptom: Graph x^3 + y^3 = 6xy and bring up the point evaluate dialog box.
Each real result in the dialog is preceeded by a copy of the prior contents of the temporary buffer.
Cause: Inadvertently left out a call to display the first result of a 2-value
point evaluate computation. Fixed this to iterate over all initial values for the ODE
approximation, and display up to 5 distinct y values for the given x value.
Workaround: None
Status: Fixed in version 2.0g.
-
Bug 105: Inaccurate tangent lines in tight-radius implicit curves
Symptom: For the equation x^3 + y^3 = 6xy displayed at default grid range, the
program computes the tangent line function as y=-0.75x + 5.25, while the real solution is y= -x+6
Cause: When Graphmatica is unable to compute the derivative for an equation,
it instead approximates the slope at a point based on the slope between the two closest
calculated points on the screen. This has a pretty huge error potential when the curve's
radius is tight enough (this one does a 180 near that point).
For implicit functions, however, we have already computed the derivative, so we should be
using the exact method instead.
Workaround: Zoom in really close up on the point where you want to calculate the
tangent line prior to calculating the slope.
Status: Fixed in version 2.0g.
-
Bug 103: Crash on startup on Wine due to bad TB_ADDBUTTON message
Symptom: Program crashes on startup running on Linux under WINE. This is because it
was passings a negative iString (0xffff0028) in the TB_ADDBUTTON message
Cause: Windows ignores invalid string parameters to these messages. WINE does not check before referencing them.
Workaround: Only affects attempts to use the program on Linux
Status: Fixed in version 2.0g.
-
E/R 101: Increase maximum allowed decimal places to 14
Request: ability to display more than 8 decimal places for point tables, integrals
Issues: Maximum double precision in C runtime library is 16 digits, but at
more than 14 digits displayed artifacts like 0 displaying as 0.000000000000001 start appearing.
Increased limit to 14.
Workaround: None.
Status: Feature added for version 2.0g.
-
E/R 98: Want ability to display tick marks without numbers along axis
Request: Would like to see the tick marks but no numbers along the axes.
Solution: Added tickmarksonly=on option to .gr file format to enable this behavior.
Status: Feature added for version 2.0f.
-
Bug 95: scanner goes into infinite loop with y=½x
Symptom: y=½x goes into a cpu spin instead of reporting an error due to the invalid symbol.
Cause: The Microsoft C runtime library reported that this character was a number, but it could not be procesed like one.
Workaround: don't try to use the ½ symbol
Status: Fixed in verion 2.0f
-
Bug 94: Copy graphs toolbar button defaults to WMF instead of EMF
Symptom: Using Copy graphs toolbar button before making any Copy Graphs xxx selections from the Edit menu selections copies as WMF, leading to text-handling defects, etc. that are known deficiencies of this format. The default copy graphs format should be EMF.
Cause: Copy graphs WMF was removed from version 2.0 of the product due to known issues with the quality of the copied image that are basically unavoidable. Although I neglected to change the default value for this setting, since the WMF code was disabled, EMF was the effective default. When WMF support was added back per special request from a customer in version 2.0e, it became the default again.
Workaround: Use the Edit/Copy Graphs EMF/Color or Monochrome menu item at least
once before using the Copy Graphs toolbar button.
Status: Fixed for version 2.0f
-
E/R 93: Changing Theta Range should refresh all affected graphs
Request: Changing the range of theta does not redraw polar graphs with the correct domain.
Cause: This is by design--changing the range only affects graphs calculated after the new range is entered.
Workaround: To force a recalculation of existing graphs, zoom in/out or change the window size slightly.
Status: Feature added for version 2.0f.
-
Bug 92: Crash when graphing equation with free variables and no points on screen
Symptom: For example, with the default grid, x=2*pi*6378.1*277/4356*a-2*pi*6378.1*floor(277/4356*a) {a:1,10,1}
makes Graphmatica crash.
Cause: There are no points visible in the above graph (solution for a=1 is larger than 8). The point list is not being initialized properly in this case which causes a crash in th
code that displays the equation under the mouse cursor later.
Workaround: Ensure correct domain prior to entering graph.
Status: Fixed for version 2.0f.
-
Bug 91: CPU spin handling "," operator when decimal separator is ","
Symptom: If in the demo CornuSpiral.gr, you change the b-assignment in the first equation from {b: 5} to the erroneous {b: 5, 8}, you'll not get an error message, but instead the program will start calculating and lock. This is a new bug in version 2.0d.
Cause: The equation parser was changed to accept numbers starting with either
decimal separator (. or ,) but was incorrectly assuming a digit always followed and got stuck
in a loop if some other character was encountered instead.
Workaround: Use "." as the decimal separator.
Status: Fixed for version 2.0f.
-
Bug 87: Copy graphs... Color uses default gray instead of black or white color scheme
Symptom: Copy graphs color (both BMP and EMF formats) does not keep changes to predefined color schemes. The copied image always has the default colors (gray background) unless you create a custom color scheme.
Cause: I removed a set of parentheses while doing code cleanup in
version 2.0d that turned out to be necessary after all. The resulting logic error means that setting the colors to one of the alternate pre-defined schemes inadvertently sets a flag that indicates the monochrome mode is set (and Copy graphs Color tries to help by setting the colors back to the default).
Workaround: Change any color setting so you are not using one of the predefined schemes. This issue does not arise when using a custom color scheme.
Status: Fixed in 12/14 reissue of version 2.0e (patch version 2.0.5.13).
-
Bug 86: new abs value operator has trouble with implicit multiplication and unary minus
Symptom: Can't graph y=|x|-1 or y=2|x|
Cause: Have to keep track of number of |'s seen and treat odd ones like "(", even ones like ")" when deciding whether "-" is minus or unary minus, and whether to insert implict "*"
Workaround: Use abs(x) notation instead.
Status: Fixed in 12/6 reissue of 2.0e (version 2.0.5.12)
-
Bug 84: Annotations print in miniscule font size
Symptom: Annotations print at unreadably small size
Cause: Fonts were being scaled back down to screen resolution before annotations were drawn.
Workaround: Copy to clipboard and print from Word or Paint.
Status: Fixed for version 2.0e.
-
Bug 83: Can't change data plot name
Symptom: In version 2.0d, attempting to change the name of a data plot always reverts
back to the original name.
Cause: Check added in 2.0d to avoid marking document dirty when name was not changed inadvertently removed the code that was setting the name in the graph document data structure.
Workaround: Change name by editing saved .gr file.
Status: Fixed for version 2.0e.
-
Bug 82: Curve fit doesn't come close enough to zero on missing coefficients
Symptom: Attempting to curve fit from a small (5 point) data set with the exact
equation y=2x produces approximation of y = 2x+2.1*10^-5
Cause: Need to run more iterations on these equations to get to the point where the coefficients are close enough to zero to be considered noise and eliminated.
Workaround: Adding more data points reduces the size of the error but does not eliminate it.
Status: Fixed for version 2.0e.
-
Bug 80: Point tables incomplete when increment smaller than pixel separation
Symptom: Point tables appear to stop early when setting increment to .01 or smaller with a typical domain.
Cause: The graphing loop could not keep up with the need to generate points, because it was calculating only one per pass (step size is adapted dynamically to maintain 1-2 pixel separation between plotted points).
Workaround: Zoom in until desired increment matches separation between screen pixels.
Status: Fixed for version 2.0e. Added code to evaluate additional points per graph step if necessary (although total number of points supported by tables is still limited to 1000).
-
Bug 79: Inequalities which approach discontinuity too steeply shade wrong
Symptom: y >= sqrt(5x-1)-2 draws with the shading flipped under the axis on the left side most of the time
Cause: The steepness of the curve at the discontinuity, plus the round-off error inherent in using the sampled points from the point list to determine where to make guesses, led to cases where a point that was above the curve in physical space ended up rounding off to below the curve in logical space, resulting in an incorrect sample for the inequality boundary drawing code.
Workaround: Resize the grid. In very occasional scenarios (or when the curve is squashed down so it's not so steep) the calculation works properly
Status: Fixed for version 2.0e.
-
Bug 77: Equation text for derviatives garbled
Symptom: Finding derviative of "y=1/(3x^2-4x)" produces a correct graph labeled with an invalid equation.
Cause: Introduced during conversion to unicode in 2.0d. The code that formats the equation is not properly ignoring old data from the temporary buffer
Workaround: None
Status: Fixed for version 2.0e.
-
Bug 76: Status bar can partially obscure grid scollbar at certain font sizes
Symptom: The status bar partly overlaps the bottom of the grid window.
Cause: The size of the graph window was being determined based on the size of the client area minus the height of the status bar font plus a constant. It appears that the height of the whitespace in the status bar control varies somewhat based on font size, though, so if you made the font big enough the constant was no longer adequate.
Workaround: None
Status: Fixed for version 2.0e.
-
Bug 75: Grid does not resize when height of edit or status bar font changes
Symptom: If you make the equation editor or status bar font size larger, the grid does not immediately adjust and may temporarily be obscured by these elements of the screen.
Cause: The Fonts dialog box was not requesting that the size of the window be recalculated under all appropriate circumstances.
Workaround: Resize the window manually to force recalculation of window sizes
Status: Fixed for version 2.0e.
-
Bug 74: Crash when entering an ode with derivative raised to an even power
Symptom: For example, dy^2=x crashes
Cause: The equation parser was incorrectly marking the ode as a cartesian relation to be graphed as "double" equation, but the data structures were not set up properly to go along with that flag.
Workaround: Isolate dy manually, e.g. dy = sqr(x) instead of dy^2=x
Status: Fixed for version 2.0e.
Older bugs
See the bug archives page for issues resolved in version 2.0d or earlier.
Patch releases
Version 2.0g is the current patch release.
Back to kSoft homepage...
kSoft, Inc. ksoft@graphmatica.com
Last updated: Sat 03 Oct 2009