Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

СИ - математические выверты

Непрочитано 26.11.2012, 00:02  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: си - математические выверты..

ах ты ж, для float в printf надо либу линкеру указать..
Реклама:
whoim вне форума  
Непрочитано 26.11.2012, 00:12  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: си - математические выверты..

Сообщение от whoim Посмотреть сообщение
ах ты ж, для float в printf надо либу линкеру указать..
Может линкеру, может ещё кому...
Вы бы озвучили что у вас за процессор и тулчайн для начала.
_Артём_ вне форума  
Непрочитано 26.11.2012, 03:03  
Taras_33
Временная регистрация
 
Регистрация: 18.07.2005
Сообщений: 74
Сказал спасибо: 29
Сказали Спасибо 42 раз(а) в 18 сообщении(ях)
Taras_33 на пути к лучшему
По умолчанию Re: си - математические выверты..

Цитата:
На горизонте еще задача.. аналог sprintf(_buff, "%01u", _v);
Если float и высокая точность не нужна попробуй так

Код:
void floatToString( float Value, char* Str, unsigned char fLen)
{
 unsigned char  bLen;
 char* pStr;
 int24 tmp_u;
 float tmp_d;

 //U1 U2 U3 U4 . F1 F2 F3 F4 

 pStr=Str; //начало U1
 if(Value‹0)
     {
      *Str='-';
      ++Str; // U2
      Value=-Value;
     }

 tmp_u = (unsigned int)Value;
 tmp_d = Value - tmp_u;
 IntToString(tmp_u, Str);

 //Если есть дробная часть
 if(fLen)
     {
      Str=Str+ strlen(Str);
      *Str++='.';
      //запоминаем длину дробной части
      bLen=fLen;
      if(fLen›4) fLen=4; //Чтобы не было переполнения (т.к. int)
      if(fLen) tmp_d = tmp_d*Dec[fLen];
      tmp_u=(unsigned int)(tmp_d);//(tmp_d+ 0.5)
      IntToString(tmp_u, Str);
      fLen=strlen(Str);
      *(Str+bLen)='\0';
      // Число 0.0012; 0.0012*10=0.012  0.0012*100=00.12 0.0012*1000=001.2
      // Восстановление потеряных незначащих нулей в целой части (00.12, 001.2)
      for(; fLen; --fLen)
          {
           --bLen;
           *(Str+bLen)=*(Str+fLen-1);
          }
      for(; fLen‹bLen; ++fLen)  *(Str+fLen)='0';
         }
      }
Если целое то так

Код:
char * My_itoa(char * buffer, int i)
    {
         unsigned int n;
         unsigned int neg = 0;
         int c;
         if (i == 0) 
         {
             buffer[0] = '0';
             buffer[1] = '\0';
             return buffer;
         }
        if(i/10000)         c=5;
        else if(i/1000)     c=4;
        else if(i/100)      c=3;
        else if(i/10)       c=2;
        else                c=1;
        
        if (i ‹ 0) 
            {
             neg=1;
             c++;
             n = -i;
            }  
        else n = i;
      
         buffer[c--] = '\0';
         do
            {
             buffer[c--] = (n % 10) + '0';
             n = n / 10;
            } while (n);

         if (neg) buffer[c--] = '-';
    
         return &buffer[c+1];
 }
Taras_33 вне форума  
Сказали "Спасибо" Taras_33
whoim (26.11.2012)
Непрочитано 26.11.2012, 05:56  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: СИ - математические выверты

читаю и плачу. исходная задача (A+B-›AB)
uint32_t twoint_as_long (uint16_t v1, uint16_t v2)
{
uint32_t High = v1, Low = v2;
while (v2) { v2 /= 10; High *= 10; }
return (High + Low);
}
обратная (AB-›A+B) и перевод в строку аналогично, только цикл раскручивается в буфер а не в холостую.
Hives вне форума  
Сказали "Спасибо" Hives
whoim (26.11.2012)
Непрочитано 26.11.2012, 09:49  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: СИ - математические выверты

Не так все просто - 1111 0022 даст 111122, а в обратную сторону 11 1122.
тогда уж тупо
uint32_t twoint_as_long (uint16_t v1, uint16_t v2)
{
uint32_t High = v1, Low = v2;
return (High*10000 + Low);
}

Или
uint32_t tab={1,10,100,1000,10000,100000};
uint32_t twoint_as_long (uint16_t v1, uint16_t v2,int n)
{
uint32_t High = v1, Low = v2;
return (High*tab[n] + Low);
}
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
whoim (26.11.2012)
Непрочитано 26.11.2012, 10:54  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: СИ - математические выверты

Сообщение от _Артём_ Посмотреть сообщение
Может линкеру, может ещё кому...
Вы бы озвучили что у вас за процессор и тулчайн для начала.
пробегало в первом посте - avrstud6 и xmega32a4

Сообщение от Hives Посмотреть сообщение
и плачу
не плачьте

спасибо, буду реализовывать математику вместо printf и преобразований

хотя.. изначально надо взять из строки (nmea) и вернуть в строку (uart) в виде символов.. все равно надо будет преобразовывать
whoim вне форума  
Непрочитано 26.11.2012, 11:08  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: СИ - математические выверты

Сообщение от whoim Посмотреть сообщение
хотя.. изначально надо взять из строки (nmea) и вернуть в строку (uart) в виде символов.. все равно надо будет преобразовывать
NMEA и так дает все в символьном виде (в пакете RMC) - что преобразовывать надо?
Boba_spb вне форума  
Непрочитано 26.11.2012, 11:33  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: СИ - математические выверты

Читаю и плачу...
Попробуйте ассемблер...
niXto вне форума  
Непрочитано 26.11.2012, 11:48  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: СИ - математические выверты

Boba_spb, необходимо преобразовать координаты в числа (очень очень целое, убираем точку или дробное - мне кажется лучше без дробного обойтись) чтобы передать ряду фильров и корректоров и вернуть назад.
whoim вне форума  
Непрочитано 26.11.2012, 11:48  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: СИ - математические выверты

niXto, зачем? у меня и на си получается)
whoim вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 20:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.