float a = 123456789.0e-5f;
system.out.printf("%f %e\n", a, a);
일때 답이
1234.567871 1.234568e+03이라고 되어 있는데
a는 123456789.0e-5f인데 1234.567871에서 뒤에 71이 어디서 나온것인지 궁금합니다 또한 %f는 소수점이항 자리 6자리를 표현한다고 배웠는데 답은 6자리가 넘습니다.
그리고 두번째 답인 1.234568e+03에서 왜 1다음에 소수점을 찍었고 e+03에서 왜 지수가 3인지 궁금합니다.
안녕하세요. 길벗수험서 운영팀입니다.
float a = 123456789.0e-5f;
%f, %e와 같이 소수점 자리수가 없는 경우에는 기본적으로 소수점 자리수가 6자리가 표시됩니다.
그러므로 %f로 출력하면 1234.567890으로 표시되어야 하는데, 지수를 실수로 표현할 때 부족한 자리수 변환 시 정규화 과정의 오차로 인해 예상과 다른 값이 표시됩니다.
이로 인해 예상과 다른 결과가 표시되도록 자리수가 부족한 표현은 시험에 출제되지 않을 것으로 예상됩니다. 그러니 적용 원리에 맞는 형태만 파악해 두세요.
두번째 답인 지수표현 출력을 할 때는 항상 정수부를 1자리로 표현해야 합니다. 때문에
123456789.0e-5는 1234.567890을 의미하므로 소수점을 왼쪽으로 3번 옮긴 1.234567890e+3이 되고,
이것에서 다시 소수점 6자리까지 출력해야하는 규칙을 적용하면 7자리에서 반올림된 수인
1.234568e+03이 출력되게 됩니다.
행복한 하루되세요.^^
-
관리자2019-03-11 10:14:11
안녕하세요. 길벗수험서 운영팀입니다.
float a = 123456789.0e-5f;
%f, %e와 같이 소수점 자리수가 없는 경우에는 기본적으로 소수점 자리수가 6자리가 표시됩니다.
그러므로 %f로 출력하면 1234.567890으로 표시되어야 하는데, 지수를 실수로 표현할 때 부족한 자리수 변환 시 정규화 과정의 오차로 인해 예상과 다른 값이 표시됩니다.
이로 인해 예상과 다른 결과가 표시되도록 자리수가 부족한 표현은 시험에 출제되지 않을 것으로 예상됩니다. 그러니 적용 원리에 맞는 형태만 파악해 두세요.
두번째 답인 지수표현 출력을 할 때는 항상 정수부를 1자리로 표현해야 합니다. 때문에
123456789.0e-5는 1234.567890을 의미하므로 소수점을 왼쪽으로 3번 옮긴 1.234567890e+3이 되고,
이것에서 다시 소수점 6자리까지 출력해야하는 규칙을 적용하면 7자리에서 반올림된 수인
1.234568e+03이 출력되게 됩니다.
행복한 하루되세요.^^