int의 집합을 곱하고 결과를 오랫동안 변환 할 때 복소 집합을 곱하여 결과를 long으로 변환하는 것과는 반대로 다른 답을 얻습니다. 예 :C#의 곱셈 오류
int a = 5;
int b = 5;
int c = 7;
int d = 6;
int ee = 6;
int f = 8;
int g = 9;
int h = 6;
int i = 6;
int j = 4;
int k = 8;
int l = 9;
int m = 5;
long x = a * b * c * d * ee * f * g * h * i * j * k * l * m;
double aa = 5;
double ab = 5;
double ac = 7;
double ad = 6;
double aee = 6;
double af = 8;
double ag = 9;
double ah = 6;
double ai = 6;
double aj = 4;
double ak = 8;
double al = 9;
double am = 5;
long y = (long)(aa * ab * ac * ad * aee * af * ag * ah * ai * aj * ak * al * am);
아무도 이런 일이 발생하는 이유를 말해 줄 수 있습니까? 감사합니다
즉 같은 결과를 얻을 것이다, 아니다 long''와''double'''때문에 '다른 것들이 있습니다 –
Double과 float __cannot__은 2의 거듭 제곱이 아닌 한 100 %의 정밀도를 가진 숫자를 유지합니다. 대신 __approximations__ 만 보유합니다. 따라서 십진수가 표시되는 이유 – TaW
프로젝트 설정에서 오버플로 검사를 활성화하는 것이 좋습니다 최소한 디버그 빌드 용). – CodesInChaos