On Sun, Mar 02, 2014 at 11:18:30PM +0000, Will Godfrey wrote:
What is even stranger is that if I compile and run the
synth on an old
version of debian there is no problem. However *exactly* the same image run on
the same machine but with debian upgraded shows the fault.
A possibly significant difference is the change from FLTK V1.1 to V1.3 but
looking on their website I can find nothing that would give a clue.
Now I'm using gcc-4.8.2 and I can reproduce the problem.
Only a rapid glance: with
/* From Fl_Valuator.cxx */
void Fl_Valuator::step(double s) {
if (s < 0) s = -s;
A = rint(s);
B = 1;
while (fabs(s-A/B) > epsilon && B<=(0x7fffffff/10)) {B *= 10; A =
rint(s*B);}
}
there is a roundoff error but if we use the simplest
/* From Fl_Valuator.H */
void step(double a, int b) {A = a; B = b;}
the problem disappears
--- yoshimi-1.1.0~/src/UI/ADnoteUI.fl 2013-05-08 09:47:45.000000000 +0200
+++ yoshimi-1.1.0/src/UI/ADnoteUI.fl 2014-03-03 14:41:58.054425629 +0100
@@ -89,8 +89,9 @@
} {}
Fl_Value_Output detunevalueoutput {
callback {o->value(getDetune((pars->VoicePar[nvoice].PDetuneType == 0) ?
(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType), 0,
pars->VoicePar[nvoice].PDetune) * pars->getBandwidthDetuneMultiplier());}
- xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01
textfont 1 textsize 10
- code0 {o->value(getDetune(pars->VoicePar[nvoice].PDetuneType, 0,
pars->VoicePar[nvoice].PDetune) * pars->getBandwidthDetuneMultiplier());}
+ xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 textfont 1
textsize 10
+ code0 {o->step(0.01, 1);}
+ code1 {o->value(getDetune(pars->VoicePar[nvoice].PDetuneType, 0,
pars->VoicePar[nvoice].PDetune) * pars->getBandwidthDetuneMultiplier());}
}
[ ... censored for avoiding noise in LAU; the complete patch is in a private msg ]
Tito Latini