【问题标题】:Function is not returning the right value in C函数未在 C 中返回正确的值
【发布时间】:2013-05-28 00:46:32
【问题描述】:

我正在尝试编写一个找到方程根的程序。我的程序一切正常,除了方程本身:它不断返回错误值(1、无穷大、0、...)。

这是我正在评估的函数:

double f(x) {
    return exp(-x)-sin(M_PI*x/2.);
}

例如,f(.3) 应该是 0.287,但它返回 1.000。奇怪的是,我不久前在另一台计算机上尝试了完全相同的代码,它运行得很好。

【问题讨论】:

  • 函数签名是什么? double f(x) 格式不正确。
  • @Elazar:从 C90 开始,它并没有形成错误;这是一个旧式(ANSI 之前)定义,x 的类型默认为int。从 C99 开始,“隐式 int”规则已被删除,这是违反约束的,需要进行诊断。
  • @KeithThompson 谢谢。你可以从我的回答中看到我知道默认到整数 - 或者可能已经猜到了,因为 everything 出于某种原因默认为 int... 我假设 f(x){ } 是一个格式良好的函数,它获取一个 int 并返回一个 int,也 :P 。我很高兴知道 K&R 的想法。

标签: c function return-value


【解决方案1】:
double f(x) {
    return exp(-x)-sin(M_PI*x/2.);
}

x 的类型没有声明,所以默认为int

你传递了.3,所以它被强制转换为int,变成了0。

exp(-0)-sin(M_PI*0/2.) == exp(0)-sin(0) == 1.0-0 == 1.0

请给自己找一个更好的编译器,并打开警告。

【讨论】:

    【解决方案2】:

    也许你应该转换你的变量。这通常发生在我的分裂中。

    【讨论】:

      【解决方案3】:
      double f(double x) {
       ......
      }
      

      【讨论】:

      • 不,不用担心。发生在每个人身上。
      【解决方案4】:
      #include <stdio.h>
      #include <math.h>
      
      double f(double x) {
          return exp(-x)-sin(M_PI*x/2.);
      }
      
      int main(void){
          printf(".3 = %f",f(.3));
          getchar();
          return 0;
      }
      

      结果: '.3 = 0.286828'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-25
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        相关资源
        最近更新 更多