Привет
Может быть это известная проблема, но я, если мне не изменяет память, раньше про нее не слышал. Компилятор из MSVC++ 6 SP 5 при включенной оптимизации сичтает, что 'ui % UINT_MAX' эквивалентно просто 'ui', где 'ui' — значение типа 'unsigned int'. Аналогичная проблема имеет место с 'unsigned long' и 'ULONG_MAX'.
В результате функция
unsigned int foo(unsigned int i){
return i % UINT_MAX;
}
возвращает результат 'UINT_MAX' при вызове 'foo(UINT_MAX)', в то время как правильный результат — '0'.