не подскажете, как бы мне точность вычислений приподнять? const float R0 = 100.0f; const float A = 3.9083E-3; const float B = -5.775E-7; float temp = (-A + sqrtf(A*A - 4*B*(1-(resistance/R0))))/(2*B); по идее я везде в 23 бита попадаю, размерность сходная, но что за нафиг?..

Комментарии: 38

  1. Bga

    Температуру считаешь? У меня без float

  2. Bga

    stm8-ntc-temperature-display-DSN_VC288/NtcThermistor.h at master · bga/stm8-ntc-temperature-display-DSN_VC288 · GitHub https://github.com/bga/stm8-ntc-temperature-display-DSN_VC288/blob/master/common-src/NtcThermistor.h Но у меня логарифмическая форумула 23 бита * 23 бита будет 46

    • Serge

      Ntc считается как rtd, только с другими коэффициентами?

      • Bga

        Думаю что нет. У тебя в вики там квадратное уравнение решать

        • Serge

          мда... посчитал по шагам, ошибка копится очень бодро похоже, проще будет lut сочинить

          • Bga

            Double не завезли?

            • Serge

              double дорого...

              • Bga

                Вот я и считаю в fixed point

                • Serge

                  Когда надо посчитать корень, ты преобразуешь к float или как-то иначе, по Ньютону, например? Когда нужна точность выше 23 бит дробной части, к float преобразовывать не вариант

                  • Bga

                    _cpp/sqrt.h at master · bga/_cpp · GitHub https://github.com/bga/_cpp/blob/master/include/!cpp/Math/Fp/sqrt.h ^

                  • Karboflex

                    ну си както через либу считает корень на процах без фпу)) вобще посчитать в фпу обычно дешевле и быстрее по ресурсам чем мучать алу))

                    • Bga

                      На stm8 нету fpu Fpu вообще мало где есть

                      • Serge

                        Не мой случай, я заданной точности достигаю только на 24 битах. Это или double, или думать Ну... М4 и жирнее

                        • Karboflex

                          я помню что в фортране есть либы которые решают вопрос накопленой ошибках при расчётах

                          • Serge

                            Где можно посмотреть, как дешевле: через double на fpu или fixedpoint?

                            • Karboflex

                              самое верное написать две реализации и сравнить) а так дсп инструкции выполняются за 1 такт жеж,

                            • Bga

                              Ну fixed point корень видишь бинарным цыклом сделан. Конечно не быстро

                              • Serge

                                Кому интересно, вот годное обсуждение про log, pow и exp для fp https://stackoverflow.com/questions/4657468/fast-fixed-point-pow-log-exp-and-sqrt Мне очень нравится корень из hacker's delight, жаль, неточный)

                                • Bga

                                  Так ещё fast inverse square root кармака

                                  • Serge

                                    Это не Кармак придумал)

                                    • Karboflex

                                      Кармак придумал делать игровой движок раньше чем под него появится железка Под октовоксельное древо железо так и не вышло и он ушел делать шлемы для вр

                                • Bga

                                  Я начал писать генерик fixed point на любой тип и смещение точки но там ещё долго. Фактически это то что гцц пишет но экспонента не рантайм а параметр шаблона

                                  • Serge

                                    И это не Элтон Джон Кармак придумал, что не отменяет, что он кросафчег) Не поможет? https://gcc.gnu.org/wiki/FixedPointArithmetic

                                    • Bga

                                      Ну таких типов у меня нет. У меня iar для stm8 Будет ch32v003 там перейду на нормальный гцц

                                  • Serge

                                    Я от думаю: а можно ли написать генерик на С?пока самое разумное - иметь сигнатуры вида fixop(a, b, len, nfracbits) и дописывать через generic_macro по необходимости

                                    • Bga

                                      Кресты удобнее за счёт шаблонов

                                      • Serge

                                        Эт да

                                        • Karboflex

                                          а потом память кудато делась)

                                          • Serge

                                            Шаблон кушает память только если сгенерированная сигнатура вызывается, не?

                                            • Karboflex

                                              да там вобще компилятор умудряется чуть больше хавать на том же самом)

                                              • Bga

                                                typename ...:type static contexpr

                                              • Serge

                                                Где-то я видел вычисления на шаблонах, когда в компайл тайм уравнения решались, а во время компиляции можно было поиграть в крестики-нолики)

                                                • Bga

                                                  _stm8/PullHiZ.h at master · bga/_stm8 · GitHub https://github.com/bga/_stm8/blob/master/include/!hal/Pin/PullHiZ.h Зато можно такую хрень писать Как там ввод сделали?

                                                • Karboflex

                                                  мне гдето в чатике расказывали) что препроцессор умудрялся считанные строки разматываеть в гигабайты текста которые потом весь день компилировал)

                                                  • Serge

                                                    Мне нравится набор от lamerok с хабра Свистят, глубину вложенности надо будет руками добавлять, нативно немного

                                                    • Karboflex

                                                      свистят не свистят а повод призадуматься))

                                                  • Bga

                                                    Рекурсивные шаблоны? Можно функцию Акермана на шаблонах написать. Чтобы твоих 64гб ОЗУ не хватило

                      • Anonim

                        посмотрите в книге Фрунзе. "микроконтроллеры это просто том 4" там автор в 8 битном mcs-51 float впихнул в три байта. и кучу функций sin cos в бонус вам там же будет.

Не нашли ответ?

Вам также может быть интересно