2017-11-03 5 views
0

SonarQube는 "부동 소수점 숫자가 평등 테스트해서는 안된다"고 주장, 다음 코드에서 버그를보고하는 rule 있습니다. 일반적으로이 규칙은 정당화되지만,이 경우 나에게 거짓 긍정 인 것으로 보입니다. 그렇다면 Double.compare의 구문을 사용하여 해결하려면 +/-Infinity, NaN 또는 그와 같은 중간 결과를 확인하는 것보다는이를 플래그로 지정하고 싶습니다. 분모가 0으로 나누는 것을 방지하기 위해 분모 == 0.0d를 비교하는 것이 맞습니까?

public void f(double denominator) 
{ 
    if (denominator == 0.0d) 
     throw new IllegalArgumentException("Division by zero."); 

    // code that involves division by denominator ... 
} 

따라서 질문 : 위의 코드가 IllegalArgumentException을 던져 않은 경우, denominator으로 나누기 ( double를 보관 표현식에서 전용) +/-Infinity 또는 NaN 중간 값으로 이어질 것입니다 만?

답변

0

때문에 우리는 이진 소수점을 표현하는 행동의 평등에 대한 테스트 플로트를 피해야한다.

당신은 본질적 질문 질문은, 위의 코드를 작동합니까? 명시 적으로 매개 변수로 0.0 전달 대신 f((0.4-0.1)-0.3) 같은 일을하지 않습니다 특히 경우, 사용하는 방법 f에 따라, 0

P.S. 매우 가까운 소수에 의해 잡아 분할하지 않습니다 십진 정밀도를 원하면 BigDecimal을 사용하십시오.