Bug introduced in 9.0 or earlier and persisting through 11.0.1 or later
I'm developing code for manipulating graphs. Spot the difference in the 2 Manipulates below:
Manipulate[
{n, m},
{{n, 10, "no of vertices"}, 1, 18, 1},
{{m, n, "number of edges"}, n, n (n - 1)/2 , 1}
(* using the +/-/slider for the number of edges does not generate Reals
but only Integers as expected *)]
this first example works as expected but
Manipulate[
{n, m},
{{n, 10, "no of vertices"}, 1, 18, 1},
{{m, n, "number of edges"}, n - 1, n (n - 1) /2, 1}
(* using the +/-/slider for the number of edges now generates Reals
not Integers: what gives? *)]
turns my nice integers into reals as soon as I change the number of edges. I can turn this back into an integer when that's what I need, but I'd prefer not to. Naturally I have a more complex task to complete but these examples are simple enough to illustrate the issue.
Version: Mathematica 9.0.1.0
Platform: Mac
Answer
This is an example of unintended behavior in Mathematica that the developers are aware of. There are a number of workarounds. The simplest is to wrap a function around the appropriate bounds; instead of
Manipulate[m, {n, {10}}, {m, n - 1, 2 n, 1}]
which illustrates the problem, try
Manipulate[Floor@m, {n, {10}}, {m, n - 1, 2 n, 1}]
A solution can also be pushed into the controller itself:
Manipulate[m, {n, {10}}, {{m, 9}, Dynamic[Slider[#1, {n - 1, 2 n, 1}]] &}]
Thanks for this feedback and suggestions are due to Karl Isensee.
Comments
Post a Comment