【问题标题】:C# function to find the delta of two numbers [duplicate]C#函数查找两个数字的增量[重复]
【发布时间】:2009-07-10 18:26:24
【问题描述】:

我只是想知道 .net 框架中是否内置了任何东西,我可以轻松地返回两个数字之间的增量?我编写了执行此操作的代码,但听起来应该已经在框架中了。

【问题讨论】:

  • 这个问题是否确定浮点数是否在给定范围内? (否则或多或少是一个减法问题......
  • 减法。 . .加法是个棘手的朋友。

标签: c# math


【解决方案1】:
delta = Math.Abs(a - b);

【讨论】:

  • 哇...24 个字符 的回答获得了 385 个代表(并且还在增加)。这不是一个糟糕的比例。
  • 还为他赢得了逆转徽章。其中只有 207 个曾经分发过!不错!
  • 特别小心a-b 等于Int32.MinValue 时,由于System.Overflow 异常,此代码将崩溃。更多详情here.
  • @RBT:Math 类中的许多函数都会发生上溢或下溢。这些方法的调用者需要知道它们的限制是什么。
  • @RobertHarvey 你是绝对正确的。我对为什么会发生这种情况进行了更多调查。正如here 所提到的,原因被证明是非常微不足道的。数字数据类型的范围总是像-x(x-1)。当然,如果我尝试在相同的数据类型中容纳+x 以获得它必然失败的绝对值:)
【解决方案2】:

我的印象是“delta”是两个数字之间的差。

除非你以不同的方式告诉我,否则我认为你想要的是:

delta = Math.Abs(a - b);

【讨论】:

    【解决方案3】:
    public static int Delta(int a, int b)
    {
      int delta = 0;
      if (a == b)
      {
        return 0;
      }
      else if (a < b)
      {
        while (a < b)
        {
          a++;
          delta++;
        }
        return delta;
      }
      else
      {
        while (b < a)
        {
          b++;
          delta++;
        }
        return delta;
      }
    }
    

    :p

    哦,男孩,我希望没有(未来的)雇主遇到这个,在他到达这篇文章的结尾之前停止厌恶地阅读..

    【讨论】:

      【解决方案4】:

      Linq 版本(需要 CLR 4.0)。

      (打断手指,清清嗓子)

      var delta = (from t in Enumerable.Range(a, a).Zip(Enumerable.Range(b, b))
                  select Math.Abs(t.Item1 - t.Item2))
                  .First();
      

      【讨论】:

        【解决方案5】:

        这不是减号运算符的作用吗? :p

        【讨论】:

        • 不完全但很好的答案;-)
        【解决方案6】:
        public static int Delta(int a, int b)
        {
            return a > 0? Delta(a-1, b-1) : a < 0 ? Delta(a+1, b+1) : b > 0 ? b : -b;
        }
        

        我认为这比 @JulianR Delta 实现还要好:-p

        编辑:我没有意识到@Robert Harvey 已经提出了这个建议,感谢他 ;-)

        【讨论】:

        • 哦,那好多了。递归链式三元运算符!
        • 是的,它甚至可以工作! XD我以为我会犯一些错误,但没想到^_^
        【解决方案7】:

        两个数字的增量是多少? Delta在集合论和微积分中有一定的意义,但这不是指数字!

        如果你想计算两个数字 a 和 b 之间的差,你可以写 |a - b|,在 C# 中是 Math.Abs(a - b)

        【讨论】:

        • Delta在微积分中没有一定的意义,只是一个常用的符号。
        • Jason,在微积分中 delta 可能指的是狄拉克 delta 函数,因此具有明确的含义。一个广泛使用的不同定义是克罗内克斯三角洲。因此,当达里奥要求澄清时,他是对的。 OPs 的问题有点模棱两可。
        【解决方案8】:

        我决定修改上面 JulianR 的有趣回答。

        代码更短,但可能更棘手:

        public static int Delta(int a, int b)
        {
          int delta = 0;
          while (a < b)
          {
            ++a;
            ++delta;
          }
          while (b < a)
          {
            ++b;
            ++delta;
          }
          return delta;
        }
        

        (对于幽默受损的人......这并不比启动线程的奇怪问题更严重)

        【讨论】:

          【解决方案9】:
          (r1+r2)/2
          

          两个数字之间的平均值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-19
            • 1970-01-01
            • 1970-01-01
            • 2013-02-28
            • 2015-05-10
            • 1970-01-01
            • 2011-12-02
            • 2012-12-29
            相关资源
            最近更新 更多