Страница 1 из 1

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

Добавлено: Вс мар 27, 2022 15:49:08
The Rock
Добрый день! Потребовалось возвести число в степень. Написал вот такую функцию,
Спойлер

Код: Выделить всё

#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
Martian
ну дык написано же английским, что требуется явное указание типа результата. 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
The Rock
Martian, Спасибо. Да действительно, скорее всего у меня были отрицательные числа, т.к. формулу я переписал не верно