如何评估数字是否为立方

The*_*ger 0 c# math double integer decimal

我正在尝试计算一个数字的立方根,以检查它是否是理想的立方。不幸的是,.NET Framework没有内置功能。因此,为了计算数字的立方根,我必须使用以下Math.Pow函数:

double cubeRoot = Math.Pow(125, (double)1 / 3);
Run Code Online (Sandbox Code Playgroud)

当我尝试评估多维数据集根是否为整数时,它输出false,而125是一个完美的多维数据集:

Console.WriteLine(cubeRoot % 1 == 0);
Run Code Online (Sandbox Code Playgroud)

我该如何克服这个问题?

phu*_*clv 6

您需要四舍五入并检查多维数据集根的多维数据集是否等于原始值

double input = 125;
double cubeRoot = Math.Pow(input, 1.0/3.0);
int c = (int)Math.Round(cubeRoot); // or Convert.ToInt32(cubeRoot);
Console.WriteLine(c*c*c == input);
Run Code Online (Sandbox Code Playgroud)

请注意,这Math.Pow(input, 1.0/3.0)不是计算多维数据集根的最准确方法,因为1.0/3.0它不能用二进制(和十进制)精确表示。但是由于无论如何我们都将结果四舍五入为int,因此输出不会受到影响

添加了.NET Core 2.1 Math.Cbrt(double),可用于以双精度获得正确的结果,尽管我不确定它是否比Math.Pow()解决方案快