2011-09-29 4 views
0

나는 Blitzmax에서 약간의 문제가있다. 나는 INI 파일을 읽으려고 노력하는데, 만약 내가 플로트 (float)를 읽는다면 아주 이상한 방식으로 변환된다. 우려 파일의 행 예를 들면 그 다음과 같습니다문자열이 잘못 float로 변환 되었습니까? (Blitzmax - Reflections)

_fStrength=40.6 

이의 출력은 다음과 같습니다

DebugLog:_fStrength: 40.5999985 

반사와 함께 작동처럼 보이는 내가 읽은 데 사용하는 코드 그 :

For Local fld:TField = EachIn id.EnumFields() 
      fld.Set(obj, SearchInFile("TempWeapon" + index, fld.Name(), "Weapons.ini")) 
      DebugLog(fld.Name() + ": " + String(fld.Get(obj))) 
     Next 

나는이 사실이 발견되었습니다. 5 또는 0이 아닙니다. 리플렉션을 사용하지 않으면 제대로 작동하기 때문에이 동작을 설명 할 수 없습니다.

아무에게 도와 줄 수 있습니까?

답변

0

컴퓨터는 제한된 크기로 이진 코드로 숫자를 저장합니다. 40.6은 이진수로 확장되어 (101000.1001100110011001100..., 무한대) 반복되는 숫자이므로 1/3의 숫자를 적어 두었을 때와 동일하게 반복되므로 정확한 표현이 불가능하므로 반올림 오류가 발생합니다.

여기서 얻은 올바른 자릿수는 단 정밀도 부동 소수점 숫자를 사용하는 것처럼 보입니다. 더 이상 이중으로 이동하여 오류를 다시 푸시 할 수 있지만 사라지지는 않습니다.

참고로 Wikipedia on floating point이 도움이 될 수 있습니다.

+0

감사합니다. 복식을 시도했지만 정말 도움이되지 못했습니다. 나는 그걸로 살아야한다고 생각해. – M0rgenstern

관련 문제