Назначение функции C, созданной Matlab, неизвестно

Может ли кто-нибудь помочь мне понять, что делает эта функция? Я предполагаю, что это какое-то возведение в степень. Я искал в 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;
}
# math signal-processing
Источник
  • 1
    Это функция возведения одного двойника в степень другого. Он получил код для многих частных случаев, и по умолчанию обычным pow , если не применяется. \
  • 1
    @ThomasJager Пожалуйста, сделайте это ответом для желтого арбуза.
Codelisting
за 2 против
Лучший ответ

Эта функция вызывает одинdouble во власти другогоdouble .

Вы можете увидеть это поpow звоните внизу:

y = pow(u0, u1);

Он также обрабатывает различные особые случаи, аккуратно обрабатывая нечисловые и бесконечные входные данные и эффективно обрабатывая специальные значения.

Вpowd означает, что это степенная функция, которая использует двойники. Из документации,_snf означает, что он может обрабатывать нескончаемые числа. Вrt_ префикс происходит от модификатора имени переменной MAT-файла . Я бы предположил, что это означает «время выполнения», но это не обосновано.

В кодеd0 а такжеd1 являются абсолютными (отрицательные становятся положительными) версиями входных данныхu0 а такжеu1 . Результат вy .


Проходим код:

  • Если основание или показатель степени равны NAN
    • Возврат NAN
  • Если показатель бесконечен
    • Если абсолютная база равна 1.0
      • Возврат 1.0
    • Если абсолютная база больше 1.0
      • Если показатель положительный (бесконечность)
        • Возврат БЕСКОНЕЧНОСТИ
      • В противном случае показатель отрицательный (бесконечность)
        • Возврат 0,0
    • В противном случае абсолютная база меньше 1.0.
      • Если показатель положительный (бесконечность)
        • Возврат 0,0
      • В противном случае показатель отрицательный (бесконечность)
        • Возврат БЕСКОНЕЧНОСТИ
  • Если абсолютный показатель равен 0,0
    • Возврат 1.0
  • Если абсолютный показатель равен 1.0
    • Если показатель положительный (1.0)
      • Вернуть базу
    • В противном случае показатель отрицательный (1.0)
      • Возврат 1.0 / база
  • Если показатель равен 2,0
    • Вернуть само базовое время
  • Если показатель степени равен 0,5, а основание неотрицательно
    • Вернуть квадратный корень из основания
  • Если основание отрицательное, а показатель степени не целое число
    • Возврат NAN
  • Остальное дело не особенное
    • Вернуть результатpow(u0, u1)
Смежные вопросы
Codelisting
Популярные категории
На заметку программисту