gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:58:34 25 4
gpt4 key购买 nike

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

当我使用下面的代码时,我得到的立方根值不正确(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#,具有整数操作数的除法作为 整数 除法执行,而不是浮点除法。它总是产生一个整数结果,1/3 产生 0。将任何数字提高到 0 的幂产生 1.0

您通过将其中一个操作数转换为 double 来强制进行浮点除法。像 1.0/3(double)integerVariable/3

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

关于c# - 在 C# 中使用 System.Math.Pow() 方法查找数字的立方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com