2009-11-02 11 views
3

적합 프레임 워크와 결과를 검사 할 때 부동 소수점 값을 다루는 좋은/모범 사례가 있습니까?부동 소수점 정밀도

우리의 응용 프로그램은 많은 계산을 수행합니다. 값을 확인하는 대부분의 상황에서 6 또는 8 자리 이상의 정밀도는 의미가 없습니다. 그래서 예상 값과 실제 값을 비교할 때 사용되는 정밀도를 지정하고 싶습니다.

내 폭력 솔루션은 정밀도 값을 설정 한 다음 테스트 케이스를 포함하는 내 ColumnFixture의 값을 비교하는 것입니다. 내가 적합의 비교 기능을 사용하지만 내 자신의 사람을 쓸 수없는 것이 될 것이다

!|info.fitnesse.fixturegallery.ColumnFixtureTest| 
|firstSummand|secondSummand|precision|expectedResult|calculateSumAndCheck()| 
|2.1|3.3|0.0001|5.3|true| 

이 방법의 주요 단점 :

이 같은 결과 것입니다.

답변

2

당신은 당신의 부동 소수점 형식 서식 일관성있는 문자열을 사용하여 문자열에 문자열을 비교할 수 있습니다. 어쨌든 여러분의 값에 ToString()을 사용하고 위키의 텍스트와 비교하기 때문에 맞춤 문자열 형식을 제공하면 Fit에서 내장 비교를 수정할 필요가 없습니다.

언어를 지정하지 않았지만 C#에서 "ToStringForComparison()"과 같은 부동 소수점 형식 (float, double 등)에 대한 정적 도우미 메서드 또는 확장 메서드를 사용할 수 있습니다. ". 모든 테스트 하네스는 테스트에서 비교할 값에 대해 속성 접근 자에서이 값을 사용해야합니다.

편집 :

당신은 정밀도를 제어하려면, 당신은 당신의 포맷 함수로 정밀도 값 전달하여 정밀도가 중요하지 않습니다 값에 대한 기본을 유지하면서 그렇게 할 수 있습니다.

+0

멋진 아이디어! 그 중 하나의 문제 만 있습니다. 우리의 결과는 종종 반복을 통해 결정되는 근사값입니다. Google 도메인 전문가가 예를 들어 결과를 계산합니다. MS 엑셀을 통해. 그런 다음 예를 들어 price = 3.45664가됩니다. 그런 다음 그들은이 예상 값을 위키에 입력합니다. 그런 다음 정밀도 즉 0.01을 지정합니다. 3.46으로 그들의 결과를 편집하도록 강요받는 것은 매우 불편할 것입니다. 그래서 나는 내 자신의 RoundedDoubleTypeAdapter 및 RoundedDouble 클래스를 만들 것입니다. – jens

관련 문제