Tags:
Oi GO, boa tarde.
realmente o valor é muito pequeno: x = 0,06/1818596352 ----> x = 0,0000000000329924779.
Se voce está usando println para ver este numero, e deverá escrever assim:
float x = 0.06/1818596352;
Serial.println(x, 20);
delay(200); // Nao mandatorio
Testei aqui e funcionou.
Rui
GO,
anexe, " como arquivo"" , o seu código pra que eu possa entende-lo e sugerir modificações.
Rui
Olá Giliard!
Você já testou imprimir os valores das variáveis intermediárias:
realPower , e C=376.99 *sq(supplyVoltage) ?
Se uma delas for zero, F também será zero. use Serial.println com 20 casa decimais para ter certeza.
Pode ser que a lib do calibrador não esteja trazendo os resultados corretos.
Obs: no UNO, double e float possuem a mesma precisão.
Somente uma observação:
Valores desse tipo não são problema para a linguagem do Arduino.
O tipo float suporta 34 casas decimais.
O que pode estar acontecendo é que a outra fórmula que está recebendo esse valor pode ter alguma variável do tipo int.
O problema da linguagem do Arduino, diferente de outras versões do C/C++, é que ela faz o cast automático do float para o int.
Por exemplo:
int x = 1;
float y = 0.000034;
x = y;
No final desse código, x vai valer 0, pois o Arduino faz a conversão automática.
Já, na linguagem Java ou outras variantes do C, a última atribuição geraria um erro em tempo de compilação por tipos incompatíveis.
Por isso tome cuidado na atribuição de tipos no Arduino.
Oi GO, boa noite.
Testei um code com base naquele pedaço que você postou.
Tive que fazer pequena modificações para testa-lo e "chutar" alguns valores.
Ãh, como F retornava, se a função não tinha nem retorno e o titulo inciava com void?
Funcionou e imprimiu o resultado esperado " 0.00001370139598846435 ".
Faço minha as palavras do grande amigo JAC: " no UNO, double e float possuem a mesma precisão."
Como você não postou o código completo com receio de copia-lo,(kkkkkkk), segue o meu completo .
É claro, deu mais trabalho do que se tivesse ele todo, mas.....
Numero_Double.ino.
Rui
Rui, você reparou que o Giliard usou vírgulas no lugar do ponto decimal?
Como isso passou pelo compilador? Não posso testar agora.
Se for isso, vai dar zero mesmo.
Oi GO,
veja o resultado usando seus valores:
Não retornou 0 em F.
B 12.50
C 18246316.0
A 0.0599999952
F 0.000000003288335
E 0.800
Cap 0.000000002630668
Valor 0.000000003288335
com o código anexo.
Nestes valores:
ten-se que usar ponto no lugar de virgula ( "," é separador milhar, e ponto separador decimal).
double B = 12,50
double C = 18246316;
double A = 0,06;
double F = A / C; //aqui ocorre o problema pois F retorna 0
double E = 0,8;
capacitor = F * E; // consequentemente aqui ocorre a multiplicação pelo zero falso
Rui
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por