我可以缩短我重复使用的函数名称吗?

标签 c formula

我有一个很长的公式,如下所示:

float a = sin(b)*cos(c)+sin(c+d)*sin(d)....

有没有办法在 C 中使用 s 而不是 sin 来缩短公式,而不影响运行时间?

最佳答案

对于sin,至少有三种使用s的选项:

使用预处理器宏:

#define s(x) (sin(x))
#define c(x) (cos(x))
float a = s(b)*c(c)+s(c+d)*c(d)....
#undef c
#undef s

请注意,使用 #undef 会立即删除宏定义,以防止它们影响后续代码。此外,您应该了解预处理器宏替换的基础知识,注意 c(c) 中的第一个 c 将被扩展,但第二个 c 不会,因为类函数宏 c(x) 仅在 c 后跟 ( 的地方展开。

此解决方案不会影响运行时间。

使用内联函数:

static inline double s(double x) { return sin(x); }
static inline double c(double x) { return cos(x); }

对于一个好的编译器,这对运行时没有影响,因为编译器应该用直接调用 来代替对 sc 的调用sincos,结果与原代码相同。不幸的是,在这种情况下,c 函数将与您在示例代码中显示的 c 对象发生冲突。您将需要更改其中一个名称。

使用函数指针:

static double (* const s)(double) = sin;
static double (* const c)(double) = cos;

对于一个好的编译器,这也不会对运行时间产生影响,尽管我怀疑与以前的解决方案相比,使用该解决方案的编译器可能无法优化代码。同样,您的名称将与 c 冲突。请注意,使用函数指针会创建对 sincos 函数的直接调用,绕过 C 实现可能为它们定义的任何宏。 (允许 C 实现使用宏和函数来实现库函数,它们可能这样做是为了支持优化或某些特性。使用高质量的编译器,这通常是一个小问题;直接调用的优化仍然应该很好.)

关于我可以缩短我重复使用的函数名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54328965/

相关文章:

math - R 多部分公式在数学上是什么意思?

excel - 在Excel中使用 'Match'函数返回一个单元格地址

vba - 计算连胜

c - 没有循环的函数是否可并行化?

python - 为什么在C中设置该成员失败?

c - 使用 Write 系统调用不间断打印 Int 数组

c - POSIX C API 函数列表在哪里?

c - 使用带有星号字符的 c 在控制台应用程序中获取密码

asp.net - SSRS 中的计算

android - 公式 px 到 dp,dp 到 px android