Andrew Martin писал(а):
Кроме какого-то куска кода, который вы выдаёте за процедуру извлечения квадратного корня из 32-разрядных чисел (дающую sqrt(4)=2 и sqrt(8)=2 и требующую неизвестно какого "приведения" входного аргумента для получения вменяемого результата), и призывов квантовать коэффициенты КИХ - фильтров (стабильность КИХ фильтров - очевидная и общеизвестная вещь) тоже ничего.
Конечно повсеместно использовать float глупо, но иногда оправдано, не только диапазоном чисел, но и удобством.
Ну, слава Богу, Вы все таки признали, что использовать флоат нужно не повсеместно.
Уже неплохо.
Удобство - понятие относительное.
Вот, скажем, одному удобно ездить на такси,а другому на своей машине. Одному удобно есть всегда вилкой, а другому руками.
Тут ведь кто на кого учился...
А если серьезно, то при создании коммерческих проектов (да и любительских, если целесообразности совпадают) основной целью является не процесс сам по себе, а достижение как ТТХ устройства, так и минимизации затрат его производства, а ПО ВОЗМОЖНОСТИ и затрат на его создание. Учитывая, что затраты на разработку в цене одного устройства делятся на тираж этого устройства, методы при разработке исключают сибаритство. "Удобство" можете оставить для своей жены, извините...
ПРАКТИКА (по крайней мере моя и моих коллег) показывает, что В КОНЦЕ КОНЦОВ "удобство" разработчика кода (и схемотехника, кстати, хоть они, как правило, и двуедины) оборачивается для проекта увеличением себестоимости изделия.
Приведу пример.
Нынче очень "модно" (даже у авторитетных в своих областях контор) применять "удобные" референсные решения. Чтобы сбить в правильную кучку схемотехнику демонстрационных плат производителей элементной базы и библиотечные референсные коды к ним, затрачивая на конечный продукт минимум усилий моска эмбеддера. В результате получаем "солидную" схемотехнику и печатную плату в сборе при себестоимости в пару-тройку килобаксов конечного изделия там, где потратив не пару недель, а пару месяцев можно создать ТАКОЙ ЖЕ ТОЧНО функционал, но с себестоимостью изделия в 2...4 раза ниже.
При этом выясняется, что и стоимость разработки тоже падает, потому что пресловутое "удобство" разработчика стоит для компании приличного бабла...
Все это я к тому, уважаемый, что аргумент "удобно" отражает либо элементарную непрофессиональность, либо недобросовестность разработчика.
ЗЫ. По поводу извлечения корня.
При заявленных Вами заслугах и опыте кажется странным, что Вы так ничего и не поняли. Хотя это, по моему, элементарно.
Извлечение корня в показанном мной алгоритме можно продолжать до ЛЮБОЙ РАЗРЯДНОСТИ РЕЗУЛЬТАТА, ибо речь будет идти лишь о счетчике циклов и расширении нулями исходного числа в сторону дробной части. То есть об увеличении его разрядности.
Сиречь, применение флоата НИКАК НЕ УЛУЧШИТ ситуацию, поскольку операция с мантиссой по извлечению корня дает АБСОЛЮТНО ТЕ ЖЕ ОГРАНИЧЕНИЯ. А учитывая, что разрядность мантиссы 32-разрядного флоата составляет 23,5 разряда, результат извлечения корня во флоате будет МЕНЕЕ ТОЧНЫМ, нежели в предложенном мной коде даже без использования расширения в дробную часть.
И в завершение повторюсь.
НЕОБХОДИМОСТЬ в использовании флоата наблюдается в очень ограниченном количестве применений.
IIR фильтрация входит в это число, хотя и с оговорками. И в случае с IIR при входной разрядности 12 (большинство МК для обработки сигналов содержит именно такую разрядность АЦП) и разрядности контроллера от 16 до 32 без наличия в нем FPU использование флоатов ПРАКТИЧЕСКИ нецелесообразно из-за весьма низкого выигрыша по затратам ОЗУ и колоссального проигрыша по скорости обработки. IIR практически исключает использование DSP MAC операций, поэтому вопрос быстрого кода стоит очень остро.
Возращаясь к нашим баранам, напомню Вам, уважаемый, что следует прочесть СТАРТОВЫЙ ТОПИК и прекратить утверждать всякую, извините, херню...
Напомню Вам, что речь шла о датчике температуры с НАТУРАЛЬНЫМ представлением чисел в формате с ФИКСИРОВАННОЙ точкой
12.4 из которых собственно являются диапазоном чисел только
9.4.
Никакая калибровка не может изменить этой разрешающей способности. То есть множитель и смещение калибровки не могут быть выше разрядности самого обрабатываемого числа (
9.4).
Из чего следует, что применять тут флоат - глупость феерическая.