내가 codechef 질문을하려고했다 -c에서 float가 작동하지 않는 이유는 무엇입니까?
int main(void) {
int testCases;
scanf ("%d\n", &testCases);
while (testCases--) {
float q,p;
scanf ("%f%f", &q,&p);
if (q >= 1000){
printf("%.6f\n",q*p - (q*p*0.1));
}
else{
printf("%.6f\n", q*p);
}
}
return 0;
}
이 성공적으로 제출되었습니다 ...하지만 그러나 나는이 코드를 시도 할 때 - -
여기 https://www.codechef.com/problems/FLOW009를 (성공적으로 제출) 내 코드는 이것이다
int main(void) {
int testCases;
scanf ("%d\n", &testCases);
while (testCases--) {
float q,p;
scanf ("%f%f", &q,&p);
if (q >= 1000){
float a = q*p - (q*p*0.1);
printf("%.6f\n",a);
}
else{
printf("%.6f\n", q*p);
}
}
return 0;
}
잘못 대답했습니다. 컴파일러에서 결과는 모든 테스트 케이스에서 동일합니다. 무슨 일이 일어나고있는거야? 첫 번째 코드 - 방금 값을 인쇄하고 있습니다. 두 번째 - 변수를 사용하여 값을 저장하고 있습니다.
추신 : 나는 값을 typecasting했지만 결과가 없습니다.
간단히 대답하면 "0.1"은 이진 부동 소수점으로 정확하게 표현 될 수 없다는 것입니다. 두 가지 코드는 내부적으로 더 정밀도를 유지하는 방식과 다르게 최적화 된 것 같습니다. (십진법과 비슷하게 "3 x 1/3"이 당신에게 1을 줄 수도 있지만 변수에 1/3을 저장하면 "0.3333333"으로 반올림되어 3을 곱하면 1이되지 않습니다.) –
문제 설명 코덱은 또한 모든 입력이 정수가되어야합니다. 이는 계산에서 정수를 사용해야 함을 나타냅니다. – Peter
참고 : '0.1'은 'double'유형입니다. – pmg