x=int(a+0.5);
Эта штука и правда округляет правильно только положительные числа. Слава богу, её писал не я. Она в коде уже много лет, но случаев, когда эта разница в единицу была бы важна, раньше не было. Тут у меня в голове что-то скребётся... где-то я уже что-то такое видел, хм... и тут я вспоминаю, как правильно!
x=floor(a+0.5);
Заработало!
Но где, где же я видел это правильную запись округления в Си? В книжке Бобровского. Мне её купили, когда я ещё в школе увлекался Си++ Билдером (я и сейчас его сильно уважаю). Тогда-то я её прочитал с интересом, но сейчас понимаю, что книжка -- не очень. Это первый случай, когда та книжка оказалась полезной.