【问题标题】:How do I calculate power-of in C#?如何在 C# 中计算幂?
【发布时间】:2009-09-02 09:06:15
【问题描述】:

我的数学不太好,而且 C# 似乎没有提供幂函数 所以我想知道是否有人知道我将如何进行这样的计算:

var dimensions = ((100*100) / (100.00^3.00));

【问题讨论】:

  • 那么var dimensions = 1.0f/100? :)

标签: c# math


【解决方案1】:

Math.Pow。该函数接受一个值并将其提升到指定的幂:

Math.Pow(100.00, 3.00); // 100.00 ^ 3.00

【讨论】:

  • 感谢这是最终的计算结果:var dimensions = (100*100)/(Math.Pow(100.00, 3.00));
【解决方案2】:

您正在寻找静态方法Math.Pow()

【讨论】:

    【解决方案3】:

    你想要的函数是Math.Pow中的System.Math

    【讨论】:

      【解决方案4】:

      不要使用Math.Pow

      当我使用时

      for (int i = 0; i < 10e7; i++)
      {
          var x3 = x * x * x;
          var y3 = y * y * y;
      }
      

      它只需要 230 毫秒,而以下需要难以置信的 7050 毫秒:

      for (int i = 0; i < 10e7; i++)
      {
          var x3 = Math.Pow(x, 3);
          var y3 = Math.Pow(x, 3);
      }
      

      【讨论】:

      • 很好,我们都预计 Math.Pow 会更慢。但不是那么多。为什么?现在让我们做作业并检查编译器生成的代码是什么(JIT 之后的cs 和汇编),你可能会感到惊讶。试试...
      • 我打算重做这个github.com/THEjoezack/ColorMine/tree/master/ColorMine/…,因为有类似x*x*x 的东西,虽然我可以使用x^3,但我不能,所以我尝试了Math.Pow 在参考源中math.cs 我找到了这个public static extern double Pow(double x, double y); 所以我无法查看代码,我做错了什么?
      • 我应该在那里找到什么?
      • 你的版本更快,因为你的版本只使用整数,例如x^x你会怎么做?
      • @zedling 你确定是这个原因吗?我刚刚尝试过 x 是带有许多小数位的双精度并得到相同的结果! (231ms vs 4870ms):dotnetfiddle.net/jgNDfm
      【解决方案5】:

      以下是针对 -ve 和 +ve 值计算 RaiseToPower 十进制值幂的代码。

      public decimal Power(decimal number, decimal raiseToPower)
              {
                  decimal result = 0;
                  if (raiseToPower < 0)
                  {
                      raiseToPower *= -1;
                      result = 1 / number;
                      for (int i = 1; i < raiseToPower; i++)
                      {
                          result /= number;
                      }
                  }
                  else
                  {
                      result = number;
                      for (int i = 0; i <= raiseToPower; i++)
                      {
                          result *= number;
                      }
                  }
                  return result;
              }
      

      【讨论】:

        【解决方案6】:

        我正在回答这个问题,因为我找不到任何答案,为什么 ^ 不适用于权力。 ^ operator in C# 是一个 exclusive or 运算符,缩写为 XORA ^ Btruth table 表明,只要输入不同,它就会输出 true:

        Input A Input B Output
        0 0 0
        0 1 1
        1 0 1
        1 1 0

        Witch 的意思是 100 ^ 3 在后台执行此计算:

        hex   binary
        100 = 0110 0100 
          3 = 0000 0011
        ---   --------- ^
        103 = 0110 0111
        

        With 当然不等于Math.Pow(100, 3) 的结果是一百万。您可以使用该答案或其他现有答案之一。


        您也可以将代码缩短为给出相同结果的代码,因为 C# 尊重 order of operations

        double dimensions = 100 * 100 / Math.Pow(100, 3); // == 0.01
        

        【讨论】:

          【解决方案7】:

          对于 2 的幂:

          var twoToThePowerOf = 1 << yourExponent;
          // eg: 1 << 12 == 4096
          

          【讨论】:

            【解决方案8】:

            Math.Pow() 返回double 这样写就太好了:

            double d = Math.Pow(100.00, 3.00);
            

            【讨论】:

              【解决方案9】:
              static void Main(string[] args)
                      {
                          int i = 2;
                          int n = -2;
                          decimal y = 1;
                          if (n > 0)
                          {
                              for (int x = 1; x <= n; x++)
                                  y *= i;               
                          }
                          if (n < 0)
                          {
                              for (int x = -1; x >= n; x--)
                                  y /= i;
                          }
                          Console.WriteLine(y);
                      }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-04-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-05-24
                • 1970-01-01
                • 2015-07-22
                • 1970-01-01
                相关资源
                最近更新 更多