Re:Source code of the file with the Zune bug (starts on line...
by judofyr on Friday January 02, 2009 @09:48AM
(#417343)
Let's be a little more DRYer:
days_in_year = IsLeapYear(year) ? 366 : 365;
while (days > days_in_year) {
days -= days_in_year;
year += 1;
}
Re:Source code of the file with the Zune bug (starts on line...
by blablebla on Friday January 02, 2009 @10:25AM
(#417363)
How about a little more CORRECTer?
#define diy(y) (IsLeapYear(y) ? 366 : 355)
while (days > diy(year)) { days -= diy(year); year += 1; }
Re:Source code of the file with the Zune bug (starts on line...
by ars on Friday January 02, 2009 @10:39AM
(#417370)
For the confused: the year changes each time, so you need to recheck IsLeapYear each time.
But I wouldn't do it with a define but rather:
while (days > (days_in_year = IsLeapYear(year) ? 366 : 365)) { days -= days_in_year; year += 1; }
Re:Source code of the file with the Zune bug (starts on line...
by tlrobinson on Friday January 02, 2009 @12:35PM
(#417470)
Incorrect, since you don't update days_in_year on each loop iteration. If you really want...
while (days > (days_in_year = IsLeapYear(year) ? 366 : 365)) {
days -= days_in_year;
year += 1;
}
I think the "while" condition should actually be
(or perhaps some simplification that I'm too lazy to figure out right now)And then the inner "if" condition can be eliminated. Thus the final code could be:
This seems logical and easier to understand than the original too.Edit: if you want to get ternary-operator fancy: