Funzione pow. Risultato non corretto

Buongiorno a tutti. Da giorni sto avendo un problema con la funzione pow.
Il valore che cerco è il seguente:
VPD= A * (1- h/100)
A = (610,78 * EXP (t/(t +238,3)) * 17,2694) /1000.

Il risultato ottenuto è diverso rispetto a quello calcolato con excel o manualmente.

Le variabili dichiarate sono di tipo float .

Che scheda stai usando?
Posta il codice con il calcolo e il risultato atteso.
In quelle formule non vedo pow, ma exp.

Ciao.

float Avpd = 0;
float base = 2,7828183;

float exponent= 0;
float a = 0;
float p = 0;


Nel loop abbiamo le letture di temperatura e umidità del dht 11 (anche queste tipo float) e il seguente codice:

exponent= t/(t+238,3);
p = pow (base, exponent);
a = (610,78 * p * 17,2594)/1000;

Mi scuso se ho postato in questo modo ma sono con il cellulare

La mia scheda è Arduino uno

Con t = 20.5 i risultati sono i seguenti:

p = 1.0844472
a = 11.4319133

La calcolatrice sul pc da come risultato per a:

11,431913322166532818547485

Ok, penso che hai usato la virgola al posto del punto come separatore decimale perché sei da telefono, del resto non compilerebbe nemmeno. Questi sarebbero i risultati errati, mentre quelli attesi che valore hanno?

Ciao.

Con t 25 e h 50 deve dare un valore di avpd di 1.6

vpd = a * (1.0 - h/100.0);

Se 'a' vale circa 11.5 x 0.5 = 5.75 siamo lontani da 1.6.

PS: anche la calcolatrice mi da questi risultati.

Ciao.

... tu sai vero che i "float" su Arduino UNO sono solo a 32 bit e che, come descritto nel reference la precisione è:

The float data type has only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.

... quindi ... non ti aspettare chissà quale precisione!

Guglielmo

Siamo troppo lontani.
Ma secondo te può essere un problema di "pow".
Se versi su internet tabella VPD escono fuori i valori di VPD in funzione di t e h.
Per quanto riguarda la precisione mi aspetto di raggiungere un valore simile. Non è importante avere la precisione assoluta.
Devo provare con un atro Arduino?

Per curiosità ho provato anche io a fare i conti...
Con t = 25 e h = 50 mi viene

Exp = 25 / (25 + 238.3) = 0.0949487
P = 2.7828183 ^ 0.0949487 = 1.102055
A = (610.78 * 1.102055 * 17.2594) / 1000 = 11.61753
Vdp = 11.61753 * (1 - (50 / 100)) = 5.808765

Tutto sommato compatibile con Mauro...
Ho sbagliato qualcosa?

Il risultato non è corretto. Condivido questo link

Aggiungo, ma EXP l'avete fatto senza pow?

Al di là della correttezza dei miei calcoli, hai provato ad applicare quelle formule fuori da arduino per vedere se ottieni il risultato "giusto"?

Si ho provato con excel ed esce il risultato corretto.
Non capisco perché con Arduino no.

Non so... a me non torna nemmeno con excel...

formule:

valori:

Scusa, per errore ho usato t = 20 anziché 25.

Vi mando il file appena sono al PC.
A presto!!!

Trovato il problema. La formula è quasi corretta.

// usabile così com'è scritta copia e incolla.
a = 610.78 * exp(t/(t + 237.3) * 17.2594)/1000.0;

Questa sopra restituisce 1.5822377 che adesso non è poi tanto lontano da 1.6.
Ciao.

La provoooo!!!!wow. Grazie a prescindere a tutti!!!.
Spero funzioni pure a me!!!

float a = 0;
  float t = 25;
  float h = 50;
  float vpd;
  //A = (610,78 * EXP( t/(t + 237,3) * 17,2694 ) / 1000.
  //                 ^                         ^
  a = 610.78 * exp( t/(t + 237.3) * 17.2594 )/1000.0;
  vpd = a * (1.0 - h/100.0);
  
  Serial.println(a, 7);
  Serial.println(vpd, 7);

Che ti dia gli stessi risultati è cosa certa, meno certa è la formula.
La variabile 'a' doveva avere un valore prossimo a 3.2 per risultare 1.6, allora gira che ti rigira è venuto fuori 1.58, ma non vuole dire che è la formula corretta.

Ciao.

Scusami Maurotec. Sono contento che funzioni, anche se non lo provato, mi fido, ma quindi il pow non serve a nulla?. La base 2,7828183 è stata sostituita da EXP?
Ultima cosa. Non sapevo si potesse usare direttamente EXP. Dove si trovano le funzioni matematiche in cui è presente EXP?
Io non l'ho trovato.
Scusami per tutte queste paranoie, ma mi piace capire il perché!!!

In math.h .

Ciao, Ale.