low-level set_round/normalise code
possible fix for a bug I don't understand
make use of the improved set_round functions