7

1つのバグを解決することで、いくつかの興味深い発見がありました。

この手順の結果

    static void Main(string[] args)
    {
        int i4 = 4;
        Console.WriteLine("int i4 = 4;");
        Console.WriteLine("i4 % 1 = {0}", i4 % 1);

        double d4 = 4.0;
        Console.WriteLine("double d4 = 4.0;");
        Console.WriteLine("d4 % 1 = {0}", d4 % 1);
        Console.WriteLine("-----------------------------------------------------------");
        int i64 = 64;
        double dCubeRootOf64 = Math.Pow(i64, 1.0 / 3.0);
        Console.WriteLine("int i64 = 64;");
        Console.WriteLine("double dCubeRootOf64 = Math.Pow(i64, 1.0 / 3.0) = {0}", dCubeRootOf64);
        Console.WriteLine("dCubeRootOf64 = {0}", dCubeRootOf64);
        Console.WriteLine("dCubeRootOf64 % 1 = {0} ??????????????  Why 1. ??????????", dCubeRootOf64 % 1);

        Console.ReadLine();
    }

int i4 = 4;
i4 % 1 = 0
double d4 = 4.0;
d4 % 1 = 0
-----------------------------------------------------------
int i64 = 64;
double dCubeRootOf64 = Math.Pow(i64, 1.0 / 3.0) = 4
dCubeRootOf64 = 4
dCubeRootOf64 % 1 = 1 ??????????????  Why 1. ??????????

int 4 % 1 = 0 - 正しい

double 4.0 % 1 = 0- 正しい

しかし、バグは次のとおりです。

Math.Pow(64、1.0 / 3.0)%1 = 1

64からの立方根は4です。なぜその場合4 % 1 = 1ですか?

4

2 に答える 2

12

Math.Pow(64, 1.0 / 3.0)を返します3.9999999999999996
これは、表示時に丸められ4ます。

1を法として、を返します0.99999999999999956。これは、表示されたときに同様に丸められ1ます。

追加することで真の値を見ることができます.ToString("R")

于 2012-05-24T19:08:03.020 に答える
3

dCubeRootOf64 % 1 = 10ではなく1を返します。Math.Pow(i64, 1.0 / 3.0)戻り値3.99999999999999963.9999999999999996 % 1戻り値を引き起こし、0.99999999999999956それらは1に丸められます。

したがって、結果は1です。

于 2012-05-24T19:12:00.250 に答える