2016-10-06 1 views
0

J'essaie de faire une fonction mathématique dans un bloc fonction dans Node-RED mais il ne peut gérer qu'une tâche plus simple comme la multiplication.Math dans un bloc fonction NodeRed

J'essaye de faire cette fonction mais elle ne peut pas manipuler les exposants (^). Peut-être qu'il y a une fonction mathématique ou quelque chose à déclarer? Il retourne juste un nombre wacko comme c'est maintenant.

msg.payload = (6*10^47)/(msg.payload^16.66); 
return msg; 
+0

Vous savez que dans C++ l'opérateur '^' est l'opérateur exclusif ou l'opérateur [bitwise] (http://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_logic_operators)? Vous recherchez peut-être la fonction ['std :: pow'] (http://en.cppreference.com/w/cpp/numeric/math/pow)? –

+0

Bonjour, Node-RED utilise javascript pour ses fonctions. Vous ne savez pas comment vous utilisez C++? – knolleary

+0

Vous avez raison .. C'est Javascript, donc ça devrait être Math.pow (msg.payload, 16.66). Pensé que c'était C++. Mais le principe était le même! – Martik

Répondre

1

L'opérateur ^ ne fait pas ce que vous pensez qu'il fait, il est l'opérateur XOR au niveau du bit.

Si vous voulez soulever quelque chose à la puissance x utilisation pow:

#include <cmath> 
std::pow(msg.payload, 16.66); 
+0

Merci! Cela l'a résolu. Je ne savais pas que c'était une expression XOR. – Martik

2

Vous pouvez utiliser l'en-tête de cmath qui contient la fonction pow, dans votre cas, il ressemblerait à quelque chose comme:

#include <cmath> 

msg.payload = (6*std::pow(10,47))/(std::pow(msg.payload,16.66)); 
return msg; 

Le nombre renvoyé est le premier paramètre élevé par le second.