C ++ (g ++을 사용하여 컴파일 됨)의 프로그램이 있습니다. 모듈 함수에 피연산자로 두 개의 이중을 적용하려고하지만 다음 오류가 발생합니다.
오류 : 'double'및 'double'유형의 이진 'operator %'에 유효하지 않은 피연산자
코드는 다음과 같습니다.
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@ supercat 자세한 내용은 굉장합니다. 나는 당신이 말하는 것을 사실로 만들기 위해 배후에 무엇이 있는지에 대한 아이디어를 가지고 있다고 생각하지만, 당신이 말하는 것이 진실 인 이유를 보는 것이 좋을 것입니다. 그것이 무대 뒤에서 어떻게 작동하는지 보는 것은 흥미로울 것입니다 (나는 이해하지만 매우 쉽게 잘못 될 수 있다고 생각합니다).
—
RastaJedi
부동 소수점 값은 정확한 정수 배수 또는 2의 거듭 제곱을 나타냅니다. 예를 들어 정수 리터럴 0.1은 정확히 3602879701896397/36028797018963968입니다 (후자는 2의 거듭 제곱입니다).
—
supercat
fmod(x,0.1)
x를 정확한 분수로 나누고 숫자 값 "1/10"으로 나누지 않고 나머지를 취합니다.
가능한 중복 : 왜 계수 나누기 (%)가 정수에만 작동합니까?
—
Paul R
fmod
예기치 않은 동작을 유발할 수 있음 을 인식하는 것이 중요합니다 . 예를 들어fmod(1, 0.1);
수학적으로 0이어야하지만 실제로는 거의 0.1입니다. 오차의 정도는 몫의 크기와 함께 올라갑니다. 예를 들어fmod(9E14, 0.1);
수학적 관점에서 볼 때 약 0.05로 평가됩니다.