program memory math strange behavior

uint32_t mult = index * (uint32_t) pgm_read_word_near( & NUM1024 );

...or...

uint32_t mult = (uint32_t) index * pgm_read_word_near( & NUM1024 );

...or...

uint32_t mult = (uint32_t) index * (uint32_t) pgm_read_word_near( & NUM1024 );