【问题标题】:Is this the correct way of translating this math formula into a c function?这是将此数学公式转换为c函数的正确方法吗?
【发布时间】:2013-10-18 14:51:30
【问题描述】:

我的函数遇到了一些问题,当我回顾我的代码时,我记得我不太确定我是否正确地翻译了这个数学公式。

注意:如果参数 x 和 y 不在区间 [1, 20] 内,则函数应返回 -1。

这是我对该函数的代码:

double irrigationExposure(int x, int y) {
   double denominator, fraction, waterexp, wexp;

   if (x >= 1 && x <= 20 && y >= 1 && y <= 20) {
      denominator = (1 + (abs(x - y)))* (1.0);
      fraction = ((IRRIEXPONUM)/(denominator));

      waterexp = (fraction) + (2);

      if (waterexp <= 10) {
         wexp = waterexp;
      }

      else {
         wexp = 2.0;
      }
   }

   else {
      wexp = -1.0;
   }

   return wexp;
}

【问题讨论】:

  • 许多事情有点奇怪(例如,为什么在分母中乘以 1?为什么有这么多括号?)但一个特殊的问题 - IRRIEXPONUM 来自哪里?
  • IRRIEXPONUM 将是我在此之前声明的常量,因此在这种情况下它将是 10。我在分母中乘以 1,因为将整数除以整数会给我一个整数值但是,如果您查看函数声明,我想要一个 double 作为返回值。所以这就是为什么我在分母中乘以 1.0,使其成为双精度值。
  • 是的,我在评论之前就知道了,但这不是重点。如果我看不到所有代码,我无法知道您的代码是否正确,并且仅仅因为您乘以 1.0 是有原因的,并不意味着您以清晰易读的方式实现了目标。乘以一表示您打算乘以一,而演员表表示您打算转换。

标签: c math


【解决方案1】:

考虑到你希望最大值为10,那么

if (waterexp <= 10) {
     wexp = waterexp;
  }

  else {
     wexp = 2.0;
  }
}

应该是

if (waterexp <= 10) {
     wexp = waterexp;
  }

  else {
     wexp = 10.0;
  }
}

否则,如果 waterexp &gt; 10 你的答案是 2,而不是 10。

【讨论】:

  • 其实我根本不会这样做。如果曝光值不能高于 10,那就是对功能的滥用。我不希望应用程序只是默默地将我认为我提供的值替换为它可以用于计算的值。因某种错误而失败要好得多。
  • 那么当 waterexp 大于 10 时,我是否必须在第一个 if 语句之后放置另一个 if 语句?我认为 else 语句是针对 waterexp 何时大于 10 的?还有Lasse V. Karlsen,在那种情况下,你会怎么写一个满足上述公式的函数??
  • @Karen 不,您不需要另一个if 语句,您已经拥有的else 涵盖了waterexp &gt; 10 的情况,它只是返回在您编写的函数中设置了错误的值。
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多