如何将数学表达式转换为C语句?

Joe*_*oey -1 c mathematical-expressions

如何将以下每个数学表达式转换为C中的等效语句?

  1. 1 /(x ^ 2 + y ^ 2)

  2. (b ^ 2 - 4ac)的平方根

Arn*_*anc 6

  • 1.0 / (pow(x,2) + pow(y,2))
  • sqrt(pow(b,2) - 4*a*c)

参见pow()sqrt()功能手册.

你也可以写x*x而不是pow(x, 2).两者都将具有完全相同的结果和性能(编译器知道pow函数的作用以及如何优化它).


(对于评论者)

GCC为这两个函数输出完全相同的汇编代码:

double pow2_a(double x) {
    return pow(x, 2);
}

double pow2_b(double x) {
    return x * X;
}
Run Code Online (Sandbox Code Playgroud)

汇编程序:

    fldl    4(%esp)
    fmul    %st(0), %st
    ret
Run Code Online (Sandbox Code Playgroud)

  • 这里不需要使用pow (3认同)
  • 这是一个更准确的源代码翻译(更好的教学imo).除了使用`x*x`是一个过早的优化(GCC 4.5.2编译`pow(x,2)`到`x*x`即使没有启用优化) (2认同)