2016-10-06 4 views
0

Я пытаюсь выполнить математическую функцию в функциональном блоке в Node-RED, но она может обрабатывать более легкую задачу, например, умножить.Math в функциональном блоке NodeRed

Я пытаюсь выполнить эту функцию, но она не может обрабатывать показатели (^). Возможно, есть математическая функция или что-то, чтобы объявить это? Он просто возвращает номер wacko, как сейчас.

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

Вы знаете, что в C++ оператор '^' является [побитовым] (http://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_logic_operators) эксклюзивным или оператором? Возможно, вы ищете функцию ['std :: pow'] (http://en.cppreference.com/w/cpp/numeric/math/pow)? –

+0

Привет, Node-RED использует javascript для своих функций. Не знаете, как вы используете C++? – knolleary

+0

Вы правы. Это Javascript, поэтому он должен быть Math.pow (msg.payload, 16.66). Думал, что это C++. Но принцип был тот же! – Martik

ответ

1

Оператор ^ не делать то, что вы думаете, что делает, это оператор побитовое исключающее ИЛИ.

Если вы хотите, чтобы поднять что-то с силой х использования pow:

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

Спасибо! Это решило это. Не знал, что это выражение XOR. – Martik

2

Вы можете использовать заголовок CMATH, который содержит POW функцию, в вашем случае это будет выглядеть примерно так:

#include <cmath> 

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

Возвращаемое число - это первый параметр, поднятый вторым.

Смежные вопросы