이 특정 숫자 집합까지 모든 것을 올바르게 평가 한이 코드를 작성했습니다.
#include <cmath>
int n1 = 187972 ;
int n2 = 12026 ;
double a = 0.002 ;
int partial = round((n1*n2)*a) ;
int result = n1 - partial ;
결과는 프로그램에서 4256804로 반환되며 이는 완전히 잘못된 것입니다. 내가 착각 한 것 같지만 방법을 알 수 없습니다.
제안 된 주석에서와 같이 n1 * n2가 int max 값을 오버플로하고 오버플로의 결과로 음수를 생성하므로 결과가 정확합니다.
사실은 -2034416024
여기 ideone 그래서 당신이 확인할 수 있습니다
해결책은 대신 긴 숫자를 사용할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다