2017-02-03 3 views
1

Mise à jour: Ok, tout fonctionne maintenant. J'ai compris ce que je faisais de mal. Dans la formule, rH (humidité relative) est censé être en pourcentage, c'est-à-dire "30%". Le format d'entrée requis pour l'attribution est le pourcentage en décimal, c'est-à-dire ".30". Une telle solution simple et je ne l'ai même pas vu. J'ai continué à entrer le .30 sans le convertir en pourcentage entier. Donc, j'ai fixé cela avec un simple .30 * 100 et il était là. Merci à tous pour m'avoir aidé, je ne sais pas si je peux faire la coche pour toutes les réponses alors je viens de choisir un. J'essaie d'écrire un code pour calculer le point de rosée. Mon code fonctionne, mais la formule que j'utilisais était trop simple et je n'étais pas capable d'obtenir une réponse précise. J'ai trouvé une formule plus avancée, qui est assez longue, et elle inclut quelques exposants. J'ai essayé de trouver comment le formater correctement, et jusqu'ici la seule chose que j'ai pu trouver est la méthode math.pow, qui est trop simple pour ce problème. Je peux me tromper, bien sûr, puisque je n'utilise java que depuis deux semaines.Comment formater une formule compliquée qui inclut des exposants dans Java

La formule en question est la suivante:

Tdc = (Tc - (14,55 + 0,114 * Tc) * (1 - (0,01 * HR)) - ((2,5 + 0,007 * Tc) * (1 - (0,01 * RH)))^3 - (15,9 + 0,117 * Tc) * (1 - (0,01 * RH))^14)

Les deux exposants sont les^3 et^4. Comment est-ce que j'écrirais ça en java? Comme je l'ai dit, le programme fonctionne, c'est un problème simple avec la mise en forme de la formule. Merci.

EDIT: Le site où j'ai trouvé cette formule est http://www.angelfire.com/ok5/orpheus/metcal.html

Il est à peu près au milieu de la page. Il montre^14, et non 4. Je n'ai pas compris cela au début, je vais vérifier pour voir lequel fonctionne.

+1

'Math.pow()' ... – Brendan

+0

Je pense que vous avez déjà répondu à votre propre question. Math.pow (double, double) est la méthode pour élever une valeur à un exposant. –

+0

Vous voulez dire «^ 4», pas «^ 14», n'est-ce pas? –

Répondre

0

14 comme exposant est très inhabituel, mais semble être correct selon "Linsley et al (1989)."

Si vous travaillez avec des variables locales, vous devez utiliser des noms en minuscules.

Enfin, vous pouvez définir une variable temporaire égale à 1 - 0.01 * rh puisque vous utilisez trois fois consécutives:

double tc = 23; // just an example 
double rh = 67; // just an example 
double rh2 = 1 - (0.01 * rh); 
double tdc = tc - (14.55 + 0.114 * tc) * rh2 - 
     Math.pow((2.5 + 0.007 * tc) * rh2, 3) - 
     (15.9 + 0.117 * tc) * Math.pow(rh2, 14); 
+0

Merci, je vais essayer. Impossible de travailler dessus maintenant car le code est sur un autre ordinateur. –

+0

Le site dont j'ai obtenu la formule montre effectivement 14, pas 4. Je vais vérifier à nouveau cela. –

+0

Ce serait la première fois que je vois une formule avec 14 comme exposant, mais qui sait? Avez-vous une référence? –

1

Les exposants sont exécutés avec la bibliothèque Math. Speciefically Math.pow(a, b).

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#pow-double-double-

De plus, je séparer les éléments constitutifs de votre équation en plus petites variables qui ont du sens. Puis combinez les parties dans votre équation finale.

Ex: double termTc1 = 14.55 + (0.114 * Tc); // Do not use this name, give them meaningful names

+0

Je vais voir comment cela fonctionne quand j'ai l'occasion, le code est sur un autre ordinateur. –

1

Tout comme vous le suggérez, utilisez la fonction Math.pow:

double tdc = Tc - 
      (14.55 + 0.114 * Tc) * (1 - (0.01 * RH)) - 
      Math.pow(((2.5 + 0.007 * Tc) * (1 - (0.01 * RH))), 3) - 
      (15.9 + 0.117 * Tc) * Math.pow((1 - (0.01 * RH)), 14); 
+0

Ah, d'accord. Je n'étais pas sûr si je pourrais mettre une équation entière là-dedans comme ça, je pensais que cela ne fonctionnerait qu'avec un seul entier ou double. Je vous remercie. –

+0

content que je pourrais aider. – user152468

+0

Pourquoi a-t-il été abaissé? – user152468

1

Je formate comme ceci:

double tdc = tc - (14.55 + 0.114 * tc) * (1 - (0.01 * rh)) 
       - Math.pow((2.5 + 0.007 * tc) * (1 - (0.01 * rh)), 3) 
       - (15.9 + 0.117 * tc) * Math.pow(1 - (0.01 * rh), 14); 

Il ne montre cependant deux erreurs potentielles dans votre formule:

  • Le deuxième exposant doit-il être réellement 14, et non 4?
  • L'expression du multiplicateur pour le deuxième exposant doit-elle être en dehors de l'exposant? (?)

Peut-être la bonne formule est la suivante, avec l'alignement de montrer le modèle de la formule:

double tdc = tc -   (14.55 + 0.114 * tc) * (1 - (0.01 * rh)) 
       - Math.pow((2.5 + 0.007 * tc) * (1 - (0.01 * rh)), 3) 
       - Math.pow((15.9 + 0.117 * tc) * (1 - (0.01 * rh)), 4); 

Ce montrent également que les sous-expression (1 - (0.01 * rh)) pourrait être précalculée, comme answer by Eric Duminil l'ont fait .

+0

En fait, le site montre 14 plutôt que 4. Je vais vérifier cela dès que possible. –

+0

J'aime vraiment l'alignement, il est beaucoup plus facile d'analyser la formule. –

+0

Ok, je suis allé de l'avant et l'ai fait comme vous l'avez suggéré, simplifié et changé le deuxième multiplicateur. Comme je l'ai dit dans un commentaire ci-dessous, cela fonctionne presque mais pas tout à fait. Ça doit être un mauvais calcul ailleurs. Je saisis en degrés Fahrenheit (requis pour les devoirs), puis convertis en Celsius, en faisant la formule du point de rosée, et en convertissant cette réponse en Fahrenheit. La version simple que j'ai d'abord utilisée me donne quand même la réponse la plus proche de la bonne réponse. –