在我的计算器中,我使用这些语句来计算平方根和立方根。
case "sqrt root":
result = Math.Sqrt(number1);
break;
case "root":
result = Math.Pow(number1, (1 / number2));
//"for cubic root" - Math.pow(number, (1/ 3))
break;
我对Math.Pow不太熟悉。还有另一种计算立方根的方法吗?使用Math.Sqrt?
答案 0 :(得分:15)
您需要使用浮点除法(执行1/3
执行整数除法,这不会起作用)
result = Math.Pow(number, (1.0 / 3.0));
但除此之外,没有立方根
的内置函数答案 1 :(得分:2)
我在某处看到了如何用math.sqrt做立方根,所以我想也许有人会在这里知道或者告诉我另一种方法,如何做立方根。 - user3841611
在数学上,您可以使用Sqrt来获取多维数据集根目录:
x 1/3 = x 1/4 * x 1/16 * x 1/64 * x 1/256 * x 1/1024 * x 1/4096 * x 1/16384 *。 ..
这来自1/3的binary representation以及:
Sqrt(x)
是x 1/2 ,Sqrt(Sqrt(x))
是x 1/4 ,Sqrt(Sqrt(Sqrt(x)))
是x 1/8 等.. Sqrt(Sqrt(Sqrt(Sqrt(x))))
是x 1/16 等.. 换句话说,你保持取数字的平方根并将每隔一个值相乘得到x 1/3 。一旦值停止变化(浮点精度有限,所以最终产品不会改变),你将有非常接近 x 1/3 的东西
如果你愿意,我会发布一些伪代码。
答案 2 :(得分:0)
通过乘以嵌套的第四根来查找多维数据集根看起来不错,但是断言失败。
static double Sqrt(double x)
{
if (x < 0)
throw new OverflowException("Cannot calculate square root from a negative number");
double epsilon = 0.0;
double current = Math.Sqrt(x), previous;
do
{
previous = current;
if (previous == 0.0)
return 0;
current = (previous + x / previous) / 2;
}
while (Math.Abs(previous - current) > epsilon);
return current;
}
// Mathematically, you can use Sqrt to get the cube root:
// x1/3 = x1/4 * x1/16 * x1/64 * x1/256 * x1/1024 * x1/4096 * x1/16384 *...
static double Cbrt(double value)
{
if (value.Equals(1.0))
return value;
double nextValue = Sqrt(Sqrt(value));
return nextValue * Cbrt(nextValue);
}
public static void Main(string[] args)
{
string question = "Why does the cube root of {0:0.000} not equal between {1:0.000000000} and {2:0.000000000} ?";
double value = 2.197, cbrt1 = Cbrt(value), cbrt2 = Math.Pow(value, 1.0 / 3.0), difference = Math.Abs(cbrt1 * .000000001);
System.Diagnostics.Debug.Assert(Math.Abs(cbrt1 - cbrt2) > difference, string.Format(question, value, cbrt1, cbrt2));
value = 125.0; cbrt1 = Cbrt(value); cbrt2 = Math.Pow(value, 1.0 / 3.0); difference = Math.Abs(cbrt1 * .000000001);
System.Diagnostics.Debug.Assert(Math.Abs(cbrt1 - cbrt2) > difference, string.Format(question, value, cbrt1, cbrt2));
value = 343.0; cbrt1 = Cbrt(value); cbrt2 = Math.Pow(value, 1.0 / 3.0); difference = Math.Abs(cbrt1 * .000000001);
System.Diagnostics.Debug.Assert(Math.Abs(cbrt1 - cbrt2) > difference, string.Format(question, value, cbrt1, cbrt2));
}
答案 3 :(得分:0)