본문 바로가기
알고 있으면 유용한 것들

Vector CAPL 코딩할때 Float 값 비교 오류 문제와 해결책

by 긍정왕수전노 2022. 7. 15.
반응형

요즘 Vector CAPL 로 SW 자동 검증기능을 구현하고 있는데 반나절 골머리 앓다가 발견한 사실!

문제의 구문은 이것이었다.

if( 수신된 float 타입 signal == 115.2)

분명 %lf로 변환해서 본 수신되 signal 값도 115.2이고 내가 비교하려는 값도 115.2였는데 계속 if 문이 false가 되었다.

이유는 알고보니...

CAPL 에서 부동소수점은 float64로 처리하고 candbc에 의해 parsing 된 부동소수점은 float32라는 점~

무슨 오기를 그렇게 파는건지?

CAPL에서는 유효자릿수 전체를 비교하는거 같은데 아마 float32 뒷자리가 0이 아닌듯 하다...

그래서 소수점 5자리 정도에서 반올림하는 트릭을 써서 결국 해결을 했다.

힌트는 100000을 곱한 후 _round를 하면 된다.. CAPL에도 엑셀에 있는 round(변수, 반올림자릿수) 이게 있었으면 참 좋았으련만...

반응형