整数の三乗根を誤差なしで求める

三乗根は Math 標準ライブラリの Pow を使って

double val = Math.Pow((double)number, 1.0 / 3.0)

こんな風に求められるけれども、number が整数のときは
これでは誤差が出るので使い物にならない。

なのでプログラムを自分で書く!

呼び出し側。最近の .NET では main なんて書かない。

using MathLibrary;

Console.WriteLine(MathLib.CubeRoot(679L * 679L * 679L));

ライブラリなんで static ライブラリでいいじゃろ。たぶん。
本丸の処理はこんなんだ。

namespace MathLibrary
{
    public static class MathLib
    {
        private static readonly int[][] cubeRootTable =
        [
            [0, 0],
            [1, 1],
            [8, 8],
            [27, 7],
            [64, 4],
            [125, 5],
            [216, 6],
            [343, 3],
            [512, 2],
            [729, 9],
        ];

        public static long CubeRoot(long num)
        {
            List<int> result = [cubeRootTable[(int)(num % 10L)][1]];

            for (long i = num / 1000L; i > 0L; i /= 1000L)
            {
                int j;
                for (j = 1; j < 10; j++)
                {
                    if ((int)(i % 1000L) < cubeRootTable[j][0])
                    {
                        break;
                    }
                }

                result.Add(cubeRootTable[j - 1][1]);
            }

            result.Reverse();

            long val = 0L;
            foreach (int v in result)
            {
                val = 10L * val + (long)v;
            }

            // 検算
            if (val * val * val == num)
            {
                return val;
            }
            else
            {
                return 0L;
            }
        }
    }
}

3乗根が整数にならない場合は 0 を返す!(どんだけ手抜きやねんw)

実行してみる。

679

D:\srcs\c_sharp\MathLibrary\ConsoleApp\bin\Debug\net8.0\ConsoleApp.exe (プロセス 16328) は、コード 0 で終了しました。
デバッグが停止したときに自動的にコンソールを閉じるには、[ツール] -> [オプション] -> [デバッグ] -> [デバッグの停止時に自 動的にコンソールを閉じる] を有効にします。
このウィンドウを閉じるには、任意のキーを押してください...

誤差なんか出ない!やったね!!