double 값을 취할 수있는 특정 변수가 실제로 정수 값을 가져 왔는지 확인해야하는 코드를 작성하고 있습니다. 이중 변수가 정수의 허용 오차 내에 있으면 정수 값을 취한다고 생각합니다. 이 공차는 1e-5입니다. 전달 된 double 인수가 "close enough"인지 확인하여 정수로 간주합니다.
다음
내 코드입니다 :#define SMALL 1e-5
//Double that attains this is considered non zero. Strictly Less than this is 0
int check_if_integer(double arg){
//returns 1 if arg is close enough to an integer
//returns 0 otherwise
if(arg - (int)arg >= SMALL){
if(arg + SMALL > (int)(arg+1.0)){
return(1);
//Code should have reached this point since
//arg + SMALL is 16.00001
//while (int)(arg+1.0) should be 16
//But the code seems to evaluate (int)(arg+1.0) to be 17
}
}
else{
return(1);
}
return(0);
}
int main(void){
int a = check_if_integer(15.999999999999998);
}
불행하게도, 인수 15.999999999999998 전달에, 함수 인 0을 반환, 그것이 나타내는 1을 반환해야하지만, 소수로 인수하다고 판단 그 인수는 "16에 충분히 가깝습니다."
저는 VS2010 전문가를 사용하고 있습니다.
모든 포인터가 크게 감사하겠습니다!
귀하의 제안을 내 경우에 작동하고 내가 가지고있는 현재의 코드에 맞는. – Tryer