Re: [Audacity-devel] Time display error
A free multi-track audio editor and recorder
Brought to you by:
aosiniao
From: Leland <le...@au...> - 2009-06-20 04:30:56
|
Jan Kolar wrote: > Does the bug appear without the small-case ells ('l') ? > If not, probably the 'undefined behaviour' is to be blamed? > Just to clarify, the bug occurs several lines before the printf()s and as a result of the fmod(). The printf()s really don't play into the problem. Here's the bit of code that is having the problem: 1 int secs = (int)(d); 2 wxString t1, t2, format; 3 4 if (secs >= 3600) 5 t1.Printf(wxT("%d:%02d:"), secs/3600, (secs/60)%60); 6 else if (secs >= 60) 7 t1.Printf(wxT("%d:"), secs/60); 8 9 if (secs >= 60) 10 format.Printf(wxT("%%0%d.%dlf"), mDigits+3, mDigits); 11 else 12 format.Printf(wxT("%%%d.%dlf"), mDigits+3, mDigits); 13 t2.Printf(format.c_str(), fmod(d, 60.0)); 14 15 s += t1 + t2; The first issue occurs on line 1. The "secs" variable is always 1 less than the value of "d"...if "d" is 59, secs will be 58. This causes another issue in that line 9 falls behind. The other problem is the the fmod() on line 13. It should return 0 if d=60, but it returns 60. I'm not saying that the printf()s aren't wrong, but they don't really have anything to do with the real issue. Leland |