Warum ist das ein undefiniertes Verhalten?
Meine Antwort aufdiese Frage war diese Funktion:
inline bool divisible15(unsigned int x)
{
//286331153 = (2^32 - 1) / 15
//4008636143 = (2^32) - 286331153
return x * 4008636143 <= 286331153;
}
Auf meinem Rechner mit VS2008-Compiler hat es jedoch perfekt funktioniertHier es funktioniert überhaupt nicht.
Hat jemand eine Idee, warum ich auf verschiedenen Compilern unterschiedliche Ergebnisse erhalte?unsigned
Überlauf ist kein undefiniertes Verhalten.
Wichtige Notiz: Nach einigen Tests wurde bestätigt, dass es schneller ist als der Rest der Division um 15. (Allerdings nicht bei allen Compilern)