Equação em C18

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Equação em C18

Mensagempor daniel.sloczynski » 28 Nov 2013 07:47

Bom dia.

Estou tentando colocar a equação que calcula a sensação térmica dentro de um programa escrito em linguagem C.

Obs: Compilador C18 V3.46, MPLAB 8.41 PIC18F2620

A equação é: ST = 33 + (10 x sqrt V + 10,45 - V) x (T - 33) / 22

Onde: T = Temperatura ambiente. Resolução de uma casa depois da vírgula EX: 33,4
V = Velocidade do vento em m/s. Também com resolução de uma cada depois da vírgula


Agora como eu coloquei isto dentro do código em forma de função:

Código: Selecionar todos

long CalculaSensacaoTermica(float VVento,float TAmbiente)
{

float ST;
float STMUL;
float RaizVel;
float AuxTemp;
long STC;


   RaizVel = sqrt(VVento);//tira raiz da velocidade
   
   //já calcula última parte da equação
   AuxTemp = TAmbiente - 33;
   AuxTemp /=22;
   
   ST = 33 + (10 * RaizVel + 10.45 - VVento) * AuxTemp;
         
   STMUL=ST;
   STMUL*=10;//multiplica pra acertar casas decimais

   STC = (unsigned long)STMUL;//converte pra long
      
return STC;
}



Coloquei os includes "math.h" e "float.h".

Pelo que noto o PIC parece não calcular certo a raiz quadrada, não sei se há alguma limitação por ser uma variável float ou algo assim ou o modo como eu montei a equação esteja errado.

Se alguém tiver alguma dica, ajuda ou a solução, fico muito agradecido.

Obrigado.
daniel.sloczynski
Bit
 
Mensagens: 47
Registrado em: 28 Abr 2011 09:13

Re: Equação em C18

Mensagempor daniel.sloczynski » 28 Nov 2013 08:27

Esqueci de mencionar:


O valor calculado por calculadora seria de 10,03.
Pelo o Pic, do jeito que eu montei a equação no código está dando 9,76.


É algo da forma como montei ou seria alguma coisa a ver com a precisão do Pic?
daniel.sloczynski
Bit
 
Mensagens: 47
Registrado em: 28 Abr 2011 09:13

Re: Equação em C18

Mensagempor vtrx » 28 Nov 2013 08:55

Declare as variaveis como volatile.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Equação em C18

Mensagempor andre_luis » 28 Nov 2013 21:52

Sugiro compilar cada pedaço da equação para ver exatamente qual das operações algébricas acima está avacalhando o resultado final.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Equação em C18

Mensagempor daniel.sloczynski » 29 Nov 2013 07:37

Declarando as variáveis como volatile não alterou o final.

Irei tentar a sugestão do Andre, de ir depurando a equação por partes.

Obrigado pela ajuda.
daniel.sloczynski
Bit
 
Mensagens: 47
Registrado em: 28 Abr 2011 09:13

Re: Equação em C18

Mensagempor ze2 » 29 Nov 2013 09:58

xutes:
-use variáveis globais
-reduza (ou modifique) o nível de otimização do compilador
-defina os numeros com . (ponto) ... AuxTemp /=22.0; //p.ex
-que sua função retorne float mesmo. converta pra long depois
-caso suspeite dela, tente criar sua propria rotina de sqr tipo isso:
http://zetasecurity.forumeiros.com/t179 ... drada-em-c
(nem sei se está certo, mas não deixa de ser curioso)
-etc e abç
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: Equação em C18

Mensagempor chrdcv » 29 Nov 2013 10:14

double minha_variavel;

Se não funcionar, recorra a um algoritmo para cálculo de raiz quadrada (google).
Seu Madruga: "O trabalho não é ruim, ruim é ter que trabalhar"
Avatar do usuário
chrdcv
Dword
 
Mensagens: 1580
Registrado em: 13 Out 2006 14:13


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x