【发布时间】:2009-09-02 09:06:15
【问题描述】:
我的数学不太好,而且 C# 似乎没有提供幂函数 所以我想知道是否有人知道我将如何进行这样的计算:
var dimensions = ((100*100) / (100.00^3.00));
【问题讨论】:
-
那么
var dimensions = 1.0f/100? :)
我的数学不太好,而且 C# 似乎没有提供幂函数 所以我想知道是否有人知道我将如何进行这样的计算:
var dimensions = ((100*100) / (100.00^3.00));
【问题讨论】:
var dimensions = 1.0f/100? :)
见Math.Pow。该函数接受一个值并将其提升到指定的幂:
Math.Pow(100.00, 3.00); // 100.00 ^ 3.00
【讨论】:
您正在寻找静态方法Math.Pow()。
【讨论】:
你想要的函数是Math.Pow中的System.Math。
【讨论】:
不要使用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);
}
【讨论】:
x*x*x 的东西,虽然我可以使用x^3,但我不能,所以我尝试了Math.Pow 在参考源中math.cs 我找到了这个public static extern double Pow(double x, double y); 所以我无法查看代码,我做错了什么?
x^x你会怎么做?
以下是针对 -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;
}
【讨论】:
我正在回答这个问题,因为我找不到任何答案,为什么 ^ 不适用于权力。 ^ operator in C# 是一个 exclusive or 运算符,缩写为 XOR。 A ^ B 的 truth 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
【讨论】:
对于 2 的幂:
var twoToThePowerOf = 1 << yourExponent;
// eg: 1 << 12 == 4096
【讨论】:
Math.Pow() 返回double 这样写就太好了:
double d = Math.Pow(100.00, 3.00);
【讨论】:
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);
}
【讨论】: