【问题标题】:How to convert mathematical expressions into C statement?如何将数学表达式转换为 C 语句?
【发布时间】:2019-09-01 12:16:43
【问题描述】:

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

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

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

【问题讨论】:

标签: c mathematical-expressions


【解决方案1】:
  • 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;
}

汇编器:

    fldl    4(%esp)
    fmul    %st(0), %st
    ret

【讨论】:

  • 这里不需要使用 pow
  • 不使用它有什么好处? (鉴于它是大多数编译器中的编译器内在)
  • 您是否建议将pow(x, 2.0) 优化为x*x
  • 编译器(比如GCC和VC++)真的知道如何优化pow(x, 2.0)(因为在C语言中只有double, double“变体”)?
  • 这是对源代码的更准确的翻译(更适合教 imo)。除了使用x * x 是一个过早的优化(GCC 4.5.2 编译pow(x,2)x*x 即使没有启用优化)
猜你喜欢
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2017-08-22
  • 2020-12-15
相关资源
最近更新 更多