Может ли кто-нибудь помочь мне понять, что делает эта функция? Я предполагаю, что это какое-то возведение в степень. Я искал в Google имя, похоже, оно происходит от какого-то кода C, сгенерированного Matlab. Кто-нибудь точно знает, что должна делать эта функция? Что могло означать ОЯТ? Спасибо.
double rt_powd_snf(double u0, double u1)
{
double y;
double d0;
double d1;
if (isnan(u0) || isnan(u1))
{
y = NAN;
}
else
{
d0 = fabs(u0);
d1 = fabs(u1);
if (isinf(u1))
{
if (d0 == 1.0)
{
y = 1.0;
}
else if (d0 > 1.0)
{
if (u1 > 0.0)
{
y = INFINITY;
}
else
{
y = 0.0;
}
}
else if (u1 > 0.0)
{
y = 0.0;
}
else
{
y = INFINITY;
}
}
else if (d1 == 0.0)
{
y = 1.0;
}
else if (d1 == 1.0)
{
if (u1 > 0.0)
{
y = u0;
}
else
{
y = 1.0 / u0;
}
}
else if (u1 == 2.0)
{
y = u0 * u0;
}
else if ((u1 == 0.5) && (u0 >= 0.0))
{
y = sqrt(u0);
}
else if ((u0 < 0.0) && (u1 > floor(u1)))
{
y = NAN;
}
else
{
y = pow(u0, u1);
}
}
return y;
}
Эта функция вызывает одинdouble
во власти другогоdouble
.
Вы можете увидеть это поpow
звоните внизу:
y = pow(u0, u1);
Он также обрабатывает различные особые случаи, аккуратно обрабатывая нечисловые и бесконечные входные данные и эффективно обрабатывая специальные значения.
Вpowd
означает, что это степенная функция, которая использует двойники. Из документации,_snf
означает, что он может обрабатывать нескончаемые числа. Вrt_
префикс происходит от модификатора имени переменной MAT-файла . Я бы предположил, что это означает «время выполнения», но это не обосновано.
В кодеd0
а такжеd1
являются абсолютными (отрицательные становятся положительными) версиями входных данныхu0
а такжеu1
. Результат вy
.
Проходим код:
pow(u0, u1)
pow
, если не применяется. \ Thomas Jager