나는 다음과 같은 어리석은 기능 here 건너 온 : 인 Math.random()는 반환 이후 "두 배,는 이상한 이중 반올림 문제는
요약public static String findOutWhatLifeIsAllAbout() {
int meaning = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 20; j++) {
for (int k = 0; k < 300; k++) {
for (int m = 0; m < 7000; m++) {
meaning += Math.random() + 1;
}
}
}
}
return String.valueOf(meaning).replaceAll("0*$", "");
}
가 예상되는 결과는 문자열"42 "입니다보다 크거나 같음 0.0 미만 1.0 "입니다. 실제로 Ubuntu에서 i5를 실행하면 결과 문자열은 "420000011", "420000008"과 유사합니다! (때로는 의미 인 Math.random()의 결과가
가 (더블 값의 어떤 종류가 인 Math.random 야기에 그립을 받으실 수 있습니다! 가 반올림지고)의 결과를 어떻게 든 라운드 1로, 나는 몇 가지 예를 볼 것으로 예상, 대신이 기능을 시도했다.
public static String findOutWhatLifeIsAllAboutAltered() {
int meaning = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 20; j++) {
for (int k = 0; k < 300; k++) {
for (int m = 0; m < 7000; m++) {
double randomResult = Math.random();
int converted = randomResult;
if (converted > 0) {
System.out.println("Misbehaving double = " + randomResult);
}
meaning += converted + 1;
}
}
}
}
return String.valueOf(meaning).replaceAll("0*$", "");
}
그러나이 제제는 항상 사람이 왜 변경된 기능의 동작 변경? 감사합니다.
또한 이유에 대한 통찰력을 제공 할 수 있습니다 "42!"반환 자바는 원래의 기능을 사용하게한다. n 컴파일은 전혀? +=
호출에서 정밀도 상실 오류가 발생하지 않아야합니까?
편집 코드를 게시했습니다. 여러분 모두가보고 싶었습니다. "원래"버전에는 캐스트가 있어야하지 않았습니다.
이것을 컴파일하는 Java 버전은 무엇입니까? 나는 이것을 시험해 보았고 Java 1.6을 사용하여 정답을 제시한다. – Yuushi
또한 내 시스템 (OS X의 Java 1.6)에서 두 함수 모두''42 "'를 반환합니다. –
첫 번째 예가 "수정되었습니다". int에 던지기로되어 있지 않았습니다. 이 코드는 컴파일되어 예기치 않은 결과를 보여줍니다. –