1

次のテストケースがあります

#include <stdio.h>

int main() { 

    double x = 3.987;

    printf("x = %lf\n", x);

    printf("(double) (long) (x) = %lf\n", (double) (long) (x));

    printf("(x*100)/100 = %lf\n", (x*100)/100);

    printf("(double) (long) (x*100)/100 = %lf\n", (double) (long) (x*100)/100);

    printf("(double) (long) (x*10)/10 = %lf\n", (double) (long) (x*10)/10);

    return 0;
}

出力は次のとおりです。

x = 3.987000
(double) (long) (x) = 3.000000
(x*100)/100 = 3.987000
(double) (long) (x*100)/100 = 3.980000
(double) (long) (x*10)/10 = 3.900000

100を掛けると100で割ると相殺されるように思えますか?しかし、実際には精度が低下しています。これはどのように正確に機能しますか?

4

2 に答える 2

5

一部の場所では、「long」にキャストしていますが、これは整数型です。たとえば、最後のケースでは、3.987 に 10 を掛けると 39.87 になります。次に、それを「ロング」にキャストしているので、39 になります。10 で割ると 3.9 になります。

を使用して何を達成したい(long)ですか?

于 2013-10-13T20:53:36.757 に答える
0

への型キャストlongは、100 で除算するよりも優先されます。

(double) (long) (x*100)/100

実際には同等です

((double) (long) (x*100)) / 100

しない

(double) (long) ((x*100)/100)
于 2013-10-13T20:54:54.547 に答える