<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Já už jsem se v tomto vlákně dávno ztratil a tak už jsem mimo.<br>
    <br>
    Ale když teď píšete o double - já myslel, že cílem, že všechno
    floatové<br>
    eliminovat a používat čistě integer, třeba s posunutou bází.<br>
    Takže mít proměnné třeba v desetitisícinách voltů a tyhle
    formátované<br>
    tisky použít pro výpis v lidském formátu.<br>
    Takže to se asi pletu, žejo.<br>
    <br>
    Já jsem to vždy na MCU bral tak, že float se použije opravdu jen
    když už<br>
    to opravdu jinak nejde. A protože to skoro vždy nějak jde, tak se
    raději<br>
    nepoužije vůbec nikdy.<br>
    <br>
    PL<br>
    <br>
    ******************<br>
    <br>
    <div class="moz-cite-prefix">Dne 22.4.2024 v 11:13 Pavel Hudeček
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:443eff26-6a0d-4dcd-8070-60dcdd02a963@seznam.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Zajímavé je, jak různé konstrukce můžou vést k různé délce kódu.<br>
      <br>
      Rozdíl 500 B trochu překvapil, ale OK. Použito je long a double.<br>
      Vlastně bych to čekal spíš naopak, když se u té delší verze
      nepředává val. Ale chápu, že tohle asi snadno sežere nějaká
      optimalizace, když se v val nic nedělá.<br>
      <br>
      Nějaké nápady na další konstrukce, které by mohly být menší?<br>
      <br>
      Dost ale překvapilo 30 B u <b>nepoužitých funkcí</b> test.<br>
      WTF?<br>
      <br>
      PH<br>
      <br>
      <br>
      <font face="monospace">template <typename T> class clDetTyp
        { // ===========================<br>
        public:<br>
            //const char det() const;<br>
             char det(unsigned int x)  {return 'u';}<br>
             char det(int x)  {return 'i';}<br>
             char det(unsigned long x)  {return 'U';}<br>
             char det(long x)  {return 'L';}<br>
             char det(float x)  {return 'f';}<br>
             char det(double x)  {return 'd';}<br>
        };<br>
        <br>
        /*// tohle bylo delsi o ~500B, const nemají vliv<br>
        template <> const char clDetTyp<unsigned int>::det()
        const { return 'u';}<br>
        template <> const char clDetTyp<int>::det() const
        {    return 'i';}<br>
        template <> const char clDetTyp<long>::det() const {
        return 'L';}<br>
        template <> const char clDetTyp<float>::det() const
        { return 'f';}<br>
        template <> const char clDetTyp<double>::det() const
        { return 'd';}*/<br>
        <br>
        template<typename T><br>
        void uartSendF(const char *t, T val, uint8_t mist) { //
        =============<br>
            clDetTyp<T> d;<br>
            if (d.det(val)=='f' || d.det(val)=='d') {<br>
                float m = 1.0;<br>
                for (uint8_t n=0; n<mist; n++) m*=10.0;<br>
                uartSendF_(t, static_cast<long>(val*m), mist);<br>
            } else if (d.det(val)=='L') uartSendF_(t, val, mist);<br>
            else uartSendF_(t, static_cast<long>(val), mist);<br>
        }<br>
        <br>
      </font><font face="monospace">/*// tyhhle funkce nejsou použitý,
        ale zakomentování ušetří 30B (</font><font face="monospace">uartSendF
        s jedním PSTR se používá i jinde)<br>
        // Změna délky PSTR v nich nevede ke změně rozdílu zabrané flash<br>
      </font><font face="monospace">const void test(int x) {<br>
            uartSendF(PSTR("test: int\r\n"));<br>
        }<br>
        void test(char x) {<br>
            uartSendF(PSTR("test: char\r\n"));<br>
        }*/</font><br>
    </blockquote>
    <br>
  </body>
</html>