【问题标题】:How to evaluate if a number is cube如何评估一个数字是否是立方体
【发布时间】:2019-04-20 13:58:48
【问题描述】:

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

double cubeRoot = Math.Pow(125, (double)1 / 3);

当我尝试评估立方根是否为整数时,它会输出 false,但 125 是一个完美的立方:

Console.WriteLine(cubeRoot % 1 == 0);

我该如何解决这个问题?

【问题讨论】:

    标签: c# math integer double decimal


    【解决方案1】:

    需要四舍五入,检查立方根的立方是否等于原值

    double input = 125;
    double cubeRoot = Math.Pow(input, 1.0/3.0);
    double c = Math.Round(cubeRoot);
    Console.WriteLine(c*c*c == input);
    

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

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

    【讨论】:

    • 感谢您的回答。我在寻找其他立方体时,威廉的回答确实不正确。
    猜你喜欢
    • 2015-07-15
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多