C++ Перевод дробных градусов в ГМС (корректировка ошибки при переводе) - Вопросы по С+

Вопрос C++ Перевод дробных градусов в ГМС (корректировка ошибки при переводе)

Регистрация
10 Июн 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
Программа должна переводить градусы минуты секунды в дробные градусы и обратно без потери точности вычисления, код конвертирования следующий:

Градус минута секунда>Дробные градусы
Drobniy=Gradus+Minuta/60+Secunda/3600;

Дробные градусы>Градус минута секунда
Gradus=floor(Drobniy+0.5);
Minuta=floor((((Drobniy-Gradus)*60))+0.5);
Secunda=((Drobniy-Gradus)*60-Minuta)*60;

При вычислении на выходе получаю следующий "баг":

Ввожу в программу значение 12 градусов 12 минут 12 секунд
Программа переводит их в дробные градусы, получаю 12,2034721374512
Затем переводит обратно в формат ГМС, получаю 12 градусов 12 минут 11,9984436035156 секунд

Как скорректировать код, чтобы на выходе, после прямого и обратного конвертирования, получались те же самые числа в градусах, минутах и секундах, что и на входе? При этом, в случае ввода на входе дробных секунд, они должны сохраняться на выходе в том же самом виде.
 
Сверху Снизу