matlab 生成的 C 函数的用途未知
Purpose of C function generated by matlab is unknown
有人可以帮我理解这个函数的作用吗?
我猜它在做某种指数运算。我在 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
表示它是一个使用双精度的幂函数。从文档中,_snf
意味着它可以处理非有限数字。 rt_
前缀来自配置变量MAT文件变量名修饰符。我猜这代表 "runtime",但那是没有根据的。
在代码中,d0
和 d1
是输入 u0
和 u1
的绝对(负数变为正数)版本。结果在y
.
查看代码:
- 如果底数或指数为 NAN
- Return南
- 如果指数是无穷大
- 如果绝对基数是1.0
- Return 1.0
- 如果绝对基数大于1.0
- 如果指数为正(无穷大)
- Return无限
- 否则指数为负(无穷大)
- Return 0.0
- 否则绝对基数小于1.0
- 如果指数为正(无穷大)
- Return 0.0
- 否则指数为负(无穷大)
- Return无限
- 如果绝对指数为0.0
- Return 1.0
- 如果绝对指数是1.0
- 如果指数为正 (1.0)
- Return基地
- 否则指数为负 (1.0)
- Return 1.0 / 基础
- 如果指数是2.0
- Return 基数本身
- 如果指数为0.5且底为非负
- Return底数的平方根
- 如果底数为负且指数不是整数
- Return南
- 否则情况不特殊
- Return
pow(u0, u1)
的结果
有人可以帮我理解这个函数的作用吗? 我猜它在做某种指数运算。我在 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
表示它是一个使用双精度的幂函数。从文档中,_snf
意味着它可以处理非有限数字。 rt_
前缀来自配置变量MAT文件变量名修饰符。我猜这代表 "runtime",但那是没有根据的。
在代码中,d0
和 d1
是输入 u0
和 u1
的绝对(负数变为正数)版本。结果在y
.
查看代码:
- 如果底数或指数为 NAN
- Return南
- 如果指数是无穷大
- 如果绝对基数是1.0
- Return 1.0
- 如果绝对基数大于1.0
- 如果指数为正(无穷大)
- Return无限
- 否则指数为负(无穷大)
- Return 0.0
- 如果指数为正(无穷大)
- 否则绝对基数小于1.0
- 如果指数为正(无穷大)
- Return 0.0
- 否则指数为负(无穷大)
- Return无限
- 如果指数为正(无穷大)
- 如果绝对基数是1.0
- 如果绝对指数为0.0
- Return 1.0
- 如果绝对指数是1.0
- 如果指数为正 (1.0)
- Return基地
- 否则指数为负 (1.0)
- Return 1.0 / 基础
- 如果指数为正 (1.0)
- 如果指数是2.0
- Return 基数本身
- 如果指数为0.5且底为非负
- Return底数的平方根
- 如果底数为负且指数不是整数
- Return南
- 否则情况不特殊
- Return
pow(u0, u1)
的结果
- Return