c++ - matlab 生成的 C 函数的用途未知

标签 c++ c matlab math signal-processing

有人可以帮我理解这个函数的作用吗? 我猜它在做某种幂运算。我在google上搜索了这个名字,它似乎来自matlab生成的一些C代码。 有谁确切知道这个功能应该做什么? SNF 代表什么? 谢谢。

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 表示它是使用 double 的幂函数。从文档来看,_snf意味着它可以处理非有限数。 rt_ 前缀来自配置变量 MAT 文件变量名称修饰符。我猜这代表“运行时”,但这没有根据。

在代码中,d0d1 是输入 u0u1< 的绝对值(负数变为正数)版本。结果在 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)的结果

关于c++ - matlab 生成的 C 函数的用途未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61315164/

相关文章:

c# 应用程序运行 matlab 错误使用 cd 太多输入参数

java - Matlab 构建器 ja

具有内存错误访问的 C++ struct new

c++ - 为 iOS 创建 Qt 5.1 应用程序

c++ - 在成员初始化列表中初始化的 vector 与传递给构造函数的 vector 不同..?

c++ - 如何在 Powershell 中运行 C++ 程序,就像 CMD 一样?

java - 如何用 Java 或 C 监视/采样输出音频?

c - parent 在 child 进入for循环之前死亡

c - 重新启动 fork 进程中的线程

对数对数图中的 Matlab title() 在某些条件下不起作用