Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Не работает pow и аналоги

Вс мар 27, 2022 15:49:08

Добрый день! Потребовалось возвести число в степень. Написал вот такую функцию,
Спойлер
Код:
#include "math.h";
uint16_t LPS25HB_readAltitude(float pH) {

   pH = pH / 10; // конвертация из гектопаскалей в паскали
   float p0 = 101.325;   // Давление на высоте 0 метров табличное значение
   float faltitude;
   uint16_t altitude;
   // Формула взята из документации из AN4528 от NXP
   float r1 = 1 - (pH / p0);
   float r2 = pow(r1, 0.190263);
   faltitude = 44330.77 * r2;
   altitude = (uint16_t) faltitude;
   return altitude;
}
на шаге float r2 = pow(r1, 0.190263); я получаю nan.

Если я в CubeIDE в режиме отладки в Expression забиваю pow(2,3) к примеру, то получаю ошибку
СпойлерMultiple errors reported.

1) Failed to execute MI command:
-var-create - * pow(2,3)
Error message from debugger back end:
'pow' has unknown return type; cast the call to its declared return type

2) Unable to create variable object

3) Failed to execute MI command:
-data-evaluate-expression pow(2,3)
Error message from debugger back end:
'pow' has unknown return type; cast the call to its declared return type

4) Failed to execute MI command:
-var-create - * pow(2,3)
Error message from debugger back end:
'pow' has unknown return type; cast the call to its declared return type
Подскажите пожалуйста, как запустить функцию возведения в степень ?

Re: Не работает pow и аналоги

Вс мар 27, 2022 16:08:39

ну дык написано же английским, что требуется явное указание типа результата. var - это не тип
в первом же случае NaN получается, потому что невозможно возвести. Вероятно, пытаетесь возвести в дробную степень отрицательное число.

Добавлено after 15 minutes 18 seconds:
А вообще, надо смотреть документацию. У меня нет под рукой для С++, но вот у, например, С# так описывается:
Код:
Параметры   Pow(x,y)                           Возвращаемое значение
----------
x или y = NaN.                              NaN
x = Любое значение, кроме NaN; y = 0            1
x = NegativeInfinity; y < 0                     0
x = NegativeInfinity;
y является положительным нечетным целым числом      NegativeInfinity
x = NegativeInfinity;
y является положительным,
но не является нечетным целым числом            PositiveInfinity
x < 0, но не NegativeInfinity;
y не является целым числом,
NegativeInfinity, или PositiveInfinity            NaN
x = -1; y = NegativeInfinityили PositiveInfinity   NaN
-1 < x< 1; y = NegativeInfinity                  PositiveInfinity
-1 < x< 1; y = PositiveInfinity                  0
x <-1 или x > 1; y = NegativeInfinity            0
x <-1 или x > 1; y = PositiveInfinity            PositiveInfinity
x = 0; y < 0                              PositiveInfinity
x = 0; y > 0                              0
x = 1; y любое значение, кроме NaN               1
x = PositiveInfinity; y < 0                     0
x = PositiveInfinity; y > 0                     PositiveInfinity

Re: Не работает pow и аналоги

Вс мар 27, 2022 16:22:28

Martian, Спасибо. Да действительно, скорее всего у меня были отрицательные числа, т.к. формулу я переписал не верно
Ответить