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

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

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

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

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

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


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

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

Сообщение от whoim Посмотреть сообщение
ах ты ж, для float в printf надо либу линкеру указать..
Может линкеру, может ещё кому...
Вы бы озвучили что у вас за процессор и тулчайн для начала.
_Артём_ вне форума  
Непрочитано 26.11.2012, 03:03  
Taras_33
Временная регистрация
 
Регистрация: 18.07.2005
Сообщений: 72
Сказал спасибо: 26
Сказали Спасибо 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.RU
 
Регистрация: 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.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 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.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: СИ - математические выверты

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

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

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

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

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

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

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

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

Закладки
Опции темы

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

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

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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot