-6

以下は、C プログラムのコード スニペットです。

#include <stdio.h>

int main(int argc, char *argv[]) {

    float kk=2*3/4+4/4+8-2;
    printf("%f",kk);
}

このプログラムの出力は 8.000000 です

JAVA 8 で書かれた同じコード。

class Untitled {
public static void main(String[] args) {
float kk=2*3/4+4/4+8-2;
System.out.println("\n----- Converting to the precision -----\n");
System.out.printf("%f",kk);
System.out.println("\n----- Converting to the Integer -----\n");
System.out.println(kk);
    }
}

このプログラムの出力は、println メソッドを使用した 8.0 です。printf メソッドは適切な精度で値を返していました。printstream のドキュメントから、コンパイラがどのように精度を失っているのか理解できませんでした。失われた精度が通知される警告または何かがあることを望んでいました.これらのタイプの落とし穴を特定する方法について何か考えはありますか? 前もって感謝します。

4

4 に答える 4

1

Java と C の両方で、コードfloat kk=2*3/4+4/4+8-2;は右側を整数として扱います.... 暗黙的に他のものにキャストする理由がないためです。

結果として、答えは常に整数値になります (整数除算、たとえば、浮動小数点では 1.5 であっても2*3/4結果が得られます)。1

したがって、とにかく浮動小数点の精度がないため、失うものは何もありません。

于 2013-11-05T23:15:59.200 に答える