playXP

서브 메뉴

Page. 1 / 271 [내 메뉴에 추가]
글쓰기
작성자 아이콘 DoMiNiOnZ
작성일 2020-07-13 02:08:09 KST 조회 2,689
제목
4.2 + 0.8 = 4 인데 정수, 실수 표현되는 수치가 다르네요. 신기.

프로그램과 연동중 경험치 차액이 계속 발생해서 추적해본결과

 

4.2 + 0.8 = 5  입니다. 당연한 결과겠지요?

 

이 5라는 값이 실수 변수라고 했을때

 

이 변수를 텍스트 출력으로써 실수변환을 시키면 5.00 으로 나오고

실수를 정수로 변환하여 출력시 4 로 나옵니다.

 

왜이럴까용 ㅋㅋ;;

 

 

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
Cerenas (2020-07-13 07:45:24 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
직접 트리거를 보지 않아서 확신할 수는 없지만

레이블 -ini_exp_max = ((정수(f 사냥수))* ini_exp_monster)설정

여기를 봐서는 시작하자마자 '정수'로 바꾸고 계산을 해버리니까 생기는 문제 같습니다.

'f 사냥수' 이부분의 값이 예시로 드신 4.2라고 한다면 말이죠...
제가 보기엔 다음과 같이 될 것 같군요

텍스트 정수 f 사냥수는 4.2 -> 정수로 변환 ->4 가 될것같구요
텍스트 f 사냥수, 소수점 2자리 표시 -> 4.2 ->4.20 이 될것같구요

ini_exp_max = ((정수(f 사냥수))* ini_exp_monster)설정
이부분은 위처럼 정수 (f 사냥수를 하면 4.2->정수로 4가 되어버릴거구요
뒤의 exp_monster가 몇일지는 모르지만 1이상이라면 , 1.5라고 치고... 4*1.5=6
ini_exp_max에는 6이 들어가지 않을까...싶네요?

제가 지금 갤디터를 켤 수 없는 상황이라 그냥 예상이긴 합니다만, '계산을 다 한 다음에 정수로 변환'하는 순서로 트리거를 짜보면 해결되지 않을까...싶습니다.
아이콘 DoMiNiOnZ (2020-07-19 19:18:26 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
보시면 위에 어떠한 공식도 들어가있지않고, 정수로 변환해서 출력하냐 실수로 출력하냐 차이밖에 없어요.

실수 i = 4.2 + 0.8 = 5.0 의 값을 정수로 출력하면 4가 나오구 실수로 출력하면 5가 나온다? 분명히 같은 값인데

뭘해봐도 안되서 소수변수를 아얘 정수변수로 함축하고 공식을 다시짜서 넣었네요 ㅎㅎ
아이콘 mofa_b (2020-07-22 07:31:30 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
제가 보기에는 고정 소수점 체계에서의 연산 오차에서 비롯된 문제인 것 같습니다.

실수 연산 구조상 어떠한 수를 정확하게 표현하는 것이 불가능한 경우가 있는데 예시로 사용된 4.2와 0.2가 그러한 수에 속하는 것 같습니다.

가령 4,2의 경우 실제값은 4.19999xxx...로 0.2의 경우 실제값은 0.19999xxx 일 것입니다.
부정확한 두 수를 더했으니 결과값 또한 실제로는 5가 아닌 4.999999xxx 일 것이고 소수점 두 자리까지만 표기했기 때문에 반올림되어 5.00 으로 나온 것으로 보입니다.

그리고 그러한 미세한 오차가 누적되어 경험치 차액이 비롯된 것 같습니다.
아이콘 DoMiNiOnZ (2020-07-22 16:49:13 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
그런거같아서 포기했어요. 프로그램이랑 같은 결과값이 나와야하는데 에효.. ㅠ.ㅠ
아이콘 mofa_b (2020-07-24 00:18:19 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
경험치 지급 방식을 정수로 구현한다면 프로그램과 같은 결과값이 나올 것 같습니다.

만약 경험치를 구현하는 과정에서 실수를 사용하시는 이유가 백분율 때문이라면 정수를 이용해서 백분율을 유사하게 구현 할 수 있습니다. 예를 들어 a * 0.2를 구현하고자 한다면 정수 체계에서는 a * 20 / 100 으로 유사하게 표현 가능합니다.

프로그램 내부에 스투식 고정 소수점을 구현하는 방법도 있지만 이건 정수로 백분율을 표현하는 것보다 다소 복잡할 것 같네요
판밍 (2020-08-26 02:19:38 KST)
0↑ ↓0
센스 이미지
mofa_b님이 말씀한것 처럼, 소수의 표기는 정확한 그 값을 표현하는게 아닌,
한없이 그 값에 유사한 값을 가져오는 개념입니다.

따라서 소수단위의 연산은 오류가 생길 수 밖에 없습니다.
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.