게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

2-1 floating point 오차는 INTEGRAL 범위 오차에 의한 계산 결과 오차까지 인정되나요?

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2018)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
sclee10



가입: 2018년 9월 13일
올린 글: 2

올리기올려짐: 2018년9월16일 20:52    주제: 2-1 floating point 오차는 INTEGRAL 범위 오차에 의한 계산 결과 오차까지 인정되나요? 인용과 함께 답변

구현에 따라 발생할 수 있는 floating point 오차는 용인해주시겠다고 하셨습니다.
계산 값의 오차만을 말씀하시는건지, 적분범위 계산에서 발생하는 부동소수점 오차에 의해서 생기는 결과의 오차까지 포함하시는건지 궁금합니다.

구체적으로는

올려주신 테스트 케이스에서

calculate(INTEGRAL(REAL 1.0, REAL (-5.0), X))
= -calculate(INTEGRAL(REAL (-5.0), REAL 1.0, X))
= -(-5.0 + -4.9 + -4.8 + ... + 0.7 + 0.8 + 0.9)
이렇게 계산하게 될 텐데, 여기서 -5.0 + -4.9 + -4.8 + ... + 0.7 + 0.8 + 0.9 수열을 두가지 방식으로 구현할 수 있습니다.

range_accum a b =
a
a +. 0.1
a +. 0.1 +. 0.1
a +. 0.1 +. 0.1 +. 0.1
...
a +. ... +. 0.1 ( <= b - 0.1 )

range_offset a b =
a +. 0.1 *. (float 0)
a +. 0.1 *. (float 1)
a +. 0.1 *. (float 2)
a +. 0.1 *. (float 3)
...
a +. 0.1 *. (float n) ( <= b - 0.1 )

이런상황에서 둘은 이런 차이를 보입니다.
rangef_accum (-5.0) 1.0 =
[-5.; -4.9; -4.80000000000000071; ...; 0.799999999999998934; 0.899999999999998912]

rangef_offset (-5.0) 1.0 =
[-5.; -4.9; -4.8; ... ; 0.700000000000000178; 0.800000000000000711]

rangef_offset은 -5. +. 0.1 *. 59. = 0.900000000000000355 > 0.9 라서 오차가 더 적지만 0.9에 해당하는 값이 포함되지 않았고
rangef_accum은 -5. +. 0.1 +. 0.1 +. ... +. 0.1 = 0.899999999999998912 <= 0.9 라서 오차가 더 크지만 0.9에 해당하는 값이 포함되게 됩니다.

이렇게 돼서 결국 rangef_accum을 사용하면 12.3, rangef_offset을 사용하면 12.39 라는 다른 결과를 내게 됩니다.

또 두가지 버전 모두가 공통적으로 포함하는 문제인데

rangef 1.0 1.1 = [1.] 인데 ( 1.0 +. 0.1 = 1.1 <= 1.1)
rangef 1.1 1.2 = [] 이 됩니다. (1.1 +. 0.1 = 1.20000000000000018 > 1.2 )

이런 경우도 감안해주시는건가ㅏ요?
위로
사용자 정보 보기 비밀 메시지 보내기
배요한
Site Admin


가입: 2018년 3월 6일
올린 글: 107

올리기올려짐: 2018년9월17일 22:14    주제: 인용과 함께 답변

안녕하세요, sclee10 학생.

우선 실명으로 다시 가입해 주셨으면 합니다.

인용:
계산 값의 오차만을 말씀하시는건지, 적분범위 계산에서 발생하는 부동소수점 오차에 의해서 생기는 결과의 오차까지 포함하시는건지 궁금합니다.


둘 다 포함합니다. 이는 둘다 ocaml에서 실수 연산으로 인해 오차가 생길 수 있기 때문입니다.

때문에 오차 범위를 주고 범위 안에 들어가면 정답으로 인정하는 방식을 취할 예정이니 너무 걱정하지 않으셔도 됩니다.

감사합니다.

TA 이동권
e-mail: dklee@ropas.snu.ac.kr

TA 배요한
e-mail: yhbae@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2018) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay