2012-04-23 2 views
0

float 변수를 0에서 100 사이의 값으로 변환하려고합니다. 부동 소수점은 항상 양수입니다. 해당 정수 값은 32 비트 부동 소수점의 최대 값과 비교 된 부동 소수점 값의 크기를 반영해야합니다. 0.0은 0으로 변환되고 3.402823466 E + 38은 100으로 변환됩니다.float 값을 C에서 0-100으로 스케일하는 함수

여기가 지금까지 내가 가지고 있지만, 0이 아닌 입력에 대한 출력으로 -1이 계속 유지됩니다.

int convFloat(float x){ 
    int y; 
    y = (int) (x/3.4e38) * 100; 
    return y; 
} 

여기서 내가 뭘 잘못하고 있니?

+0

당신은 3.4e36''으로 나눌 필요가있다. 그렇다면 100을 곱할 필요가 없으며 중간 결과를 보킹 할 위험이 없습니다. –

답변

3

이 :

y = (int) (x/3.4e38) * 100; 
// ^--------------^ 
// cast (x/3.4e38)to int 

이되어야한다 :

y = (int) ((x/3.4e38) * 100); 
// ^----------------------^ 
// cast ((x/3.4e38) * 100)to int 
+1

OK, 그렇습니다.하지만 OP가 -1이 아닌 0이되는 이유는 무엇입니까? –

+0

@ 마틴 : 게시 된 코드로 영업 이익이 -1이라고 믿는 데 어려움이 있습니다 ... –

+0

이것은 실제 도움이되지 않습니다. 빠른 테스트를 거치면 모든 입력에 대해 기본적으로 0이 생성되므로 아무런 개선이 없습니다. –

0
((union { float f; uint32_t u; }){ val }.u>>23&255)*100/255