使用C#中的System.Math.Pow()方法查找数字的立方根

本文关键字:查找 方法 数字 立方根 中的 System Math Pow 使用 | 更新日期: 2023-09-27 18:21:23

在编写程序时,我在一个函数中发现了一个数字的立方根。

当我使用下面的代码时,我得到了一个不正确的多维数据根值(1是为n = 64打印的)。

public static void cubicPairs(double n)
{
    double root = (System.Math.Pow(n, (1/3)));
    Console.WriteLine(root);
}

现在,在我把代码稍微改成这个之后,

public static void cubicPairs(double n)
{
    double root = (System.Math.Pow(n, (1.0/3.0))); //Changed how second parameter is passed
    Console.WriteLine(root);
}

我得到了root = 3.9999999999999996(在调试时),但方法是打印4(这是正确的)。

为什么这两个值之间有差异?如果这与System.Math.Pow()方法的第二个参数有关(即1.0/3.0,它是一个递归值),我应该用什么来查找多维数据根,以便获得4(在调试时)而不是3.9999999999999996

使用C#中的System.Math.Pow()方法查找数字的立方根

这是{大括号语言}中的标准陷阱,包括C#,带有整数操作数的除法是作为整数除法执行的,而不是浮点除法。它总是产生一个整数结果,1 / 3产生0。将任何数字提升到0的幂产生1.0

通过将其中一个操作数转换为double,可以强制进行浮点除法。如CCD_ 10或CCD_。

与乘法问题类似,但通常不是陷阱,整数操作数会产生有溢出风险的整数结果。这反映了处理器的工作方式,它对这些操作有不同的指令,IMUL与FMUL以及IDIV与FDIV。后一个因奔腾处理器中的一个错误而闻名:)

您可以尝试为多维数据集根功能运行此代码。

textBox2.Text = Math.Pow(Convert.ToDouble(textBox1.Text), 0.3333333333333333).ToString();

这个错误(顺便说一下,它只是4E-16-400五分之一)是由浮点错误引起的。

如果数字在某个阈值内,你可以通过四舍五入来规避这一点:

public static void cubicPairs(double n)
{
    double root = (System.Math.Pow(n, (1/3)));
    double roundedRoot = Math.Round(root);
    if (Math.Abs(roundedRoot - root) < VERY_SMALL_NUMBER)
        return roundedRoot;
    else
        return root;
}

其中VERY_SMALL_NUMBER可以是1e-10

public static void Main()
{
    int a= int.Parse(Console.ReadLine());
    int sum=0;
    for(int i=0 ; i<= a ;i++)
    {
        for(int j=0 ; j<i ;j++)
        {
            sum =+ (i*i);
        }
        Console.WriteLine("Number is : {0} and cube of the {0} is :{1} 'n",i,sum*i);
    }
}

试试

Math.Ceiling(Math.Pow(n, (double)1 / 3));