Página 1 de 1

Equação em C18

MensagemEnviado: 28 Nov 2013 07:47
por daniel.sloczynski
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.

Re: Equação em C18

MensagemEnviado: 28 Nov 2013 08:27
por daniel.sloczynski
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?

Re: Equação em C18

MensagemEnviado: 28 Nov 2013 08:55
por vtrx
Declare as variaveis como volatile.

Re: Equação em C18

MensagemEnviado: 28 Nov 2013 21:52
por andre_luis
Sugiro compilar cada pedaço da equação para ver exatamente qual das operações algébricas acima está avacalhando o resultado final.


+++

Re: Equação em C18

MensagemEnviado: 29 Nov 2013 07:37
por daniel.sloczynski
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.

Re: Equação em C18

MensagemEnviado: 29 Nov 2013 09:58
por ze2
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ç

Re: Equação em C18

MensagemEnviado: 29 Nov 2013 10:14
por chrdcv
double minha_variavel;

Se não funcionar, recorra a um algoritmo para cálculo de raiz quadrada (google).