気づいた

MPI関数のMPI_Wtimeは単位が秒で、かつ返り値はdoubleとのことなので、何を勘違いしたのかdouble型だけれども整数値が返ってくるものだと思っていた。それとの兼ね合いで、以下のようなコードを書いていた。

int i;
int sum;
for(i = 0; i < 10; i++){
  int start = MPI_Wtime();
  somefunction();
  int end = MPI_Wtime();
  sum += end - start;
}

これがナンセンスなのはどうでもいいとして、ちょっとJavaで以下のようなコードを書いてみた。

class T{
  public static void main(String [] argv){
    int i = 0;
    i = i + 0.1;
    System.out.println(i);
  }
}

コンパイルするとエラーメッセージが。

T.java:4: 精度が落ちている可能性
検出値  : double
期待値  : int
                i = i + 0.1;
                      ^
エラー 1 個

ところが、以下のコードだとちゃんと実行できる。値は0。

class T{
	public static void main(String [] argv){
		int i = 0;
		i += 0.1;
		System.out.println(i);
	}
}

これって誰か指摘してたっけか。どっかで見たような記憶があるんだが、誰が言っていたのか忘れた。
あと、Cでもこのあたりのチェックは入れて欲しいと思った。