-
JAVA LOOP 처리 자바 루프 처리자바 JAVA 2020. 7. 23. 07:16
LOOP 처리
4.7 숫자 오류 최소화
루프 연속 조건에서 부동 소수점 숫자를 사용하면 숫자 오류가 발생할 수 있다.
부동 소수점 숫자와 관련된 숫자 오류는 불가피하다. 이 절에서는 다음 작업을 수행하는 방법에 대해 논의한다.
예를 들어 그러한 오류를 최소화하다
목록 4.8은 0.01로 시작하고 1.0으로 끝나는 시리즈를 요약한 예를 제시한다.
시리즈 내 숫자는 0.01 + 0.02 + 0.03 등과 같이 0.01만큼 증가한다.
for 루프(라인 7~8)는 반복적으로 관리 변수 i를 합산한다. 이 변수, 즉.
0.01로 시작하여 각 반복 후에 0.01씩 증가한다. 루프는 내가 하면 끝난다.
1.0을 넘다
for 루프 초기 동작은 임의의 문장이 될 수 있지만 종종 컨트롤을 초기화하는 데 사용된다.
가변의 이 예제에서 관리 변수가 부동형일 수 있음을 알 수 있다. 실은.
그것은 어떤 데이터 유형도 될 수 있다.
정확한 합은 50.50이어야 하지만 정답은 50.49985이다. 결과는 정확하지 않다.
왜냐하면 컴퓨터는 부동 소수점 숫자를 나타내기 위해 고정된 수의 비트를 사용하기 때문이다.
일부 부동 소수점을 정확하게 나타낼 수 없다. 다음과 같이 프로그램의 부동액을 2배로 바꾸면 정밀도가 약간 향상되는 것을 볼 수 있는데, 그 이유는 다음과 같다.
이중 변수는 64비트를 보유하는 반면, 부동 변수는 32비트를 보유한다.
그러나 결과가 실제로 49.50000000000003인 것을 보면 깜짝 놀랄 것이다. 무엇
잘못됐어? 루프에서 각 반복에 대해 i를 표시하면 마지막 I가
1(정확히 1은 아님)보다 약간 크다. 이것이 마지막 내가 합에 추가되지 않게 한다. The
근본적인 문제는 부동 소수점 숫자가 근사치로 표현된다는 것이다. 에게
문제를 수정하고 정수 카운트를 사용하여 모든 숫자가 합에 추가되도록 하십시오.
여기 있다
새로운 루프이 루프 이후 합은 50.49999999999995이다. 가장 큰 것부터 가장 작은 것까지 더하는 것이 더 적다.
가장 작은 것에서 가장 큰 것으로 추가하는 것보다 정확한. 이 현상은 미완성 산술의 공예품이다. 아주 작은 숫자를 아주 큰 숫자에 추가하는 것은 아무런 효과도 없을 수 있다.
결과가 변수가 저장할 수 있는 것보다 더 많은 정밀도를 필요로 하는 경우. 예를 들어 1000000.0 + 0.000000001의 부정확한 결과는 100000000.0이다. 더 정확한 것을 얻기 위해서.
결과, 계산 순서를 신중하게 선택하십시오. 크기 전에 더 작은 숫자 추가
숫자는 오류를 최소화하는 한 가지 방법이다.
4.8 사례 연구
루프는 프로그래밍에서 기본이다. 루프를 쓰는 능력은 필수적이다.
자바 프로그래밍을 배우는 것.
만약 당신이 루프를 사용하여 프로그램을 쓸 수 있다면, 당신은 프로그램하는 방법을 알고 있을 것이다! 이러한 이유로 이 섹션은
루프를 이용한 문제 해결의 세 가지 추가 사례를 제시한다.
4.8.1 사례 연구: 가장 위대한 공통 구분자 찾기
두 정수 4와 2 중 가장 큰 공통점(gcd)은 2이다. 가장 흔한 것
16과 24의 두 정수의 점수는 8이다. 가장 위대한 공통점을 어떻게 찾으십니까? 내버려두다
두 입력 정수는 n1과 n2이다. 1번이 공통점이라는 것은 알고 있겠지만, 어쩌면 그럴지도 모른다.
가장 큰 평판이 아니다 그래서 k(k 2, 3, 4의 경우)를 확인할 수 있다.
k가 n1 또는 n2보다 클 때까지 n1과 n2의 공통 구분자. 공통 구분선 저장
gcd라는 변수에서. 처음에는 gcd가 1이다. 새로운 공통점이 발견될 때마다, 그것은
새로운 gcd가 되다. 2개에서 최대 2개까지 가능한 공통 구분자를 모두 확인했을 때
n1 또는 n2 변수 gcd의 값은 가장 큰 공통점이다. 그 생각은 번역될 수 있다.
다음 루프로:이 프로그램을 어떻게 쓰시겠습니까? 즉시 코드를 작성해 주시겠습니까? 아니오
타자 치기 전에 생각하는 것이 중요하다. 생각하는 것은 당신이 논리적인 해결책을 만드는 것을 가능하게 한다.
코드를 어떻게 쓸지에 대한 걱정 없는 문제 일단 논리적인 해결책을 찾으면
솔루션을 Java 프로그램으로 변환할 코드를 입력하십시오. 번역이 독특하지 않다. 을 위해
예를 들어, 다음과 같이 포루프를 사용하여 코드를 다시 작성할 수 있다.어떤 문제는 여러 가지 해결책을 가지고 있는 경우가 많고, gcd 문제는 여러 가지 방법으로 해결할 수 있다.
프로그래밍 연습 4.14는 또 다른 해결책을 제시한다. 보다 효율적인 솔루션은
클래식 유클리드 알고리즘(www.cut-the-knot.org/blue/Euclid 참조).자세한 내용을 보려면 shtml).
숫자 n1의 구분자는 n1 / 2보다 클 수 없으며,
다음 루프를 사용하여 프로그램 개선을 시도하십시오.이 개정안은 틀렸다.
이유를 찾을 수 있겠니? 자세한 내용은 체크포인트 질문 4.21을 참조하십시오.
대답하다
'자바 JAVA' 카테고리의 다른 글
JVM 사용과 무효화 보이드 사용법 (0) 2020.07.23 JAVA 메소드 호출 방법 (0) 2020.07.23 JAVA ELEMENT 프로그래밍 (0) 2020.07.21 JAVA 문법오류와 들여쓰기, 주석달기 (0) 2020.07.21 JAVA 컴퓨터, 프로그램, 자바 소개 (0) 2020.07.21