Зачем так писать код??? (непрограммистам неинтересно)
Сейчас пишу управляющую программу к одной промышленной железке.
Железка сама очень даже замечательная, работает как часы и измеряет что нужно совершенно прекрасно.
Но вот микропрограмма внутри этого устройства, написана мягко говоря "странновато".
Несколько параметров задаются (начало...конец диапазона измерений, например).
Сегодня тестировал свою программу перебирая с маленьким шагом весь диапазон доступных значений этого параметра.
Наблюдаю следующую картину:
-12.1 - нормально принимает значение
-12.15 - ошибка
-12.2 - норма
...
-999 - норма
9999 - норма
-6.231 - ошибка
-6.23 - норма
6.231 - норма
999.2 - норма
999.21 - ошибка
9998.5 - ошибка
Причем "родной", фирменный, конфигуратор этой штуковины вел себя точно так же!
Сбоил на этих же значениях.
Очень несразу до меня дошло, что где-то внутри микропрограммы, полученное число переводят в строку символов, длиной 5 знаков, и минус - тоже знак!
Вот зачем так делать? Все равно потом переводить обратно, для занесения в регистр!
В документации об этом нюансе, естественно, ни слова.
Есть еще внезапный вариант:
менеджер проекта: какая должна быть длина у числа?
заказчик: ну пусть будет пять знаков....
Так может внутри используются bcd числа (что гораздо более вероятно, чем строки)
какой интерфейс передачи?
Если железка слабая, то числодробилка у неё отвратительная, поэтому извращаются с длинной арифметикой кто как может, тут по видимом как то тупо переводят =)
Скорее всего кто-то увлекался sscanf/sprintf.