2008-10-27 3 views
8

Ruby에서 델타와 두 개의 부동을 비교하는 몇 가지 기능/구문이 있습니까? 과 유사한 것 assert_in_delta (expected_float, actual_float, delta)테스트/단위에서 부울을 반환합니까?델타와 수레를 비교하는 방법?

+1

허용 된 대답은 괜찮 수레하지만,이 작업을 수행하는 플로트 또는 인 BigDecimal의 메소드가없는 나는 놀랐어요 비교. –

답변

15
(expected_float - actual_float).abs <= delta 
+0

꽤 많은 assert_in_delta 검사가 있는데, 인수가 float로 변환 될 수 있고 델타가 음수가 아닌지 확인하기위한 추가 어설 션을 제외하고는. –

+0

감사! https://github.com/e-travel/evelpidon_core_ext/commit/7889913af630ec5c8d5465f7d137b2b48fc81c00 –

+0

@NikosD : 테스트는 아마도 .005가 아니라 0.006을 테스트해야합니다. (10.01-10.005) .abs가 <= .005 인 것을 보증 할 수는 없습니다 (나를 위해 0.004999999999999005이지만 숫자 부정확도는 .005보다 약간 더 작게 만들 가능성이 높습니다) – ysth

0

당신은 또한 당신의 응용 프로그램과 무엇을 당신의 부동 소수점 값이 실제로 대표하는 것은, 그것은 감각와 유리수로 변환 할 수 있도록 수에 따라 상대 허용 오차/델타 계산

http://realtimecollisiondetection.net/blog/?p=89

1

을해야 할 수도 있습니다 주어진 정밀도. Rationals는 단지 두 개의 정수이므로 직접 비교는 항상 올바르게 동작합니다.

예를 들어 미국 통화 금액을 알고있는 경우이를 amount.to_r.round(2)으로 저장하면 평등에 대한 정확한 비교가 가능합니다.

그냥 생각 ... 모든 정수가 아닌 값이 부정확하게-표현 될 필요가