Перейти к содержанию
    

Ну для этого сначала нужно понимать русский языка, в частности различие между единственным (цикл)и множественным числом (циклы).

Нерусский учит русскому языку? :)

 

Имхо, не стоит разворачивать циклы, получится мизерная прибавка к скорости, но чувствительно увеличится размер кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нерусский учит русскому языку? :)

Многим стоило бы поучиться.

 

Имхо, не стоит разворачивать циклы, получится мизерная прибавка к скорости, но чувствительно увеличится размер кода.

Нужно не разворачивать имеющиеся, а не плодить лишние.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас есть что-нибудь для ARM - Cortex?

как и для всех других - наиболее часто используется усеченная реализация printf(). Для ARM, кстати, деление и иже с ним, в нем тоже не используются - десятичные числа, в отличии от hex у меня почти всегда немногозначные - на вычитании быстрее.

Нерусский учит русскому языку? :)

Я с середины шестого класса за границей CCCР в русской школе учился, а учителя там были очень хорошие. После той 'пятерки', особых проблем с грамотностью нет, хотя, конечно, забывается :(.

во втором забивал пробелами....

Все делать в первом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как и для всех других - наиболее часто используется усеченная реализация printf(). Для ARM, кстати, деление и иже с ним, в нем тоже не используются - десятичные числа, в отличии от hex у меня почти всегда немногозначные - на вычитании быстрее.

Осталось только выложить его сюда.

Я с середины шестого класса за границей CCCР в русской школе учился, а учителя там были очень хорошие.

нужно писать "в отличие"

Все делать в первом.

А "минус" и "плюс" потом занести? Неужто эффективнее?

У меня выводится следующим образом:

(upd. добавил еще и 0 для полноты)

"     0"
"   -12"
"+32767"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно писать "в отличие"

Про "отличия" не знаю, а там хорошие.

Осталось только выложить его сюда.

Это уже мое дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про "отличия" не знаю, а там хорошие.

Это у вас синтаксическая ошибка в посте №18

 

И на этом закончим? Единственное, что я вынес из разговора - надо с указателем повозиться. И к коду aaarrr присмотреться, пока что не понимаю, как работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это у вас ошибка в посте №18

Ну это да, предлог 'в отличие' и существительное в предложном падеже с предлогом 'в' :( попутал. Я же говорю - забывается :(. Язык не прост. Не 'C' :), ну и форум не филологический, а "сишный", к счастью.

Единственное, что я вынес из разговора - надо с указателем повозиться.

А то, что ДВЕ операции деление и взятие остатка от деления замного будет, не вынесли :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну это да, предлог 'в отличие' и существительное в предложном падеже с предлогом 'в' :( попутал. Я же говорю - забывается :( . Язык не прост.

Замечу, что я вам на ваши ошибки указал без оскорбительных выражений.

Учу на собственном примере. :)

 

А то, что ДВЕ операции деление и взятие остатка от деления замного будет, не вынесли :(

О! А как... ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О! А как... ?

Ну, например, как у Genadi. И, если выбирать из двух, то тогда уж оставлять деление, а не остаток он него - много менее громоздко в подавляющем большинстве случаев.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И к коду aaarrr присмотреться, пока что не понимаю, как работает.

Неправильно, кстати, работает для v >= 59074 :biggrin:

В качестве отмазки скажу, что таких чисел у меня и не было.

 

Можно, конечно, компенсатор ошибки округления приделать, типа: if(v >= 57074) vi -= 13422, но это уже некрасиво. Зато для знаковых 16-битных чисел исходный вариант годится без всяких допиливаний :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А то, что ДВЕ операции деление и взятие остатка от деления замного будет, не вынесли :(

Хм, но если делать вычитанием, то это будет цикл, а деление нужно сделать только один раз, тем более оно на кортексе аппаратное вроде?

Будет быстрее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, например, как у Genadi.

А разве в коде Genadi видно, как у него реализована функция ldiv?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда то для дисплея (отсюда фиксированное число цифр в числе) делал примерно так:

//-----------Функция преобразования числа в строку----------//
void decbin_5dgt(uint8_t* x, uchar8* buffer)
{
   uint8_t i;
   uint8_t buff[DSPL_BUFF_SIZE]; //промежуточный интовый буфер
  
        for (i=0; i<DSPL_BUFF_SIZE;i++)buff[i]=0; //зануляем
        //разлаживаем
        for (i=*x; i>=10000; i-=10000)buff[0]++;
        for (i=*x-10000*buff[0]; i>=1000; i-=1000)buff[1]++;
        for (i=*x-10000*buff[0]-1000*buff[1]; i>=100; i-=100)buff[2]++;
        for (i=*x-10000*buff[0]-1000*buff[1]-100*buff[2]; i>=10; i-=10)buff[3]++;
        for (i=*x-10000*buff[0]-1000*buff[1]-100*buff[2]-10*buff[3]; i>=1; i-=1)buff[4]++;
     
      
        for (i=0; i<DSPL_BUFF_SIZE;i++)buffer[i]=(uchar8)buff[i]; //переписываем в наш массив                                                }
       
}
//==========================================================//

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будет быстрее.

На 9999999999 типа, да, а вот на 123? Попробуйте.

 

А разве в коде Genadi видно, как у него реализована функция ldiv?

Видно, на что он делит.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам написал такое:void si16toad (int16_t Number, char * StrBuf)

 

Алгоритм один в один.. Другого наверно и быть не может.

// convert and output decimal value
int IntToStrPrint( S32 val )
{
    U8  c, len = 0;
    U8  buf[ 10 ]; // max size for text representation of S32 value

    if (val < 0)
    {
        PutChar('-');
        val =  -val;
    }

    do {
        c = val % 10 + '0';
        val /= 10;
        buf[ len++ ] = c;
    } while (val != 0);
    
    while (len)
        PutChar(buf[ --len ]);
    return SUCCESS;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...