Поскольку вы, похоже, хотите фиксированную точку , я бы просто использовал фиксированную точку (целые числа в единицах 1/16), если это возможно.Но если вам действительно нужно смешивать операции с плавающей запятой и округление, один из способов - смещение всех ваших значений на огромное число, такое, что место 1/16 является последним.К сожалению, при использовании gcc у этого подхода могут возникнуть проблемы в таких системах, как i387, где выражения с плавающей запятой вычисляются с повышенной точностью, если вы не используете везде long double
, поэтому с практической точки зрения ответ Иоахима может быть проще сделать надежным (хотяэто, вероятно, работает намного хуже).