Hi, I'm using gcc "long long" type for my calculator. I have to check integer overflow. I'm using sign compare to check overflow, but it doesn't work for 10^16 * 10^4 : 10000000000000000 * 10000
Here you have my code to check overflow : long long produit = a * b; // a,b: long long bool ok; if (0 < a) { if (0 < b) ok = (produit > 0); // (+)*(+) -> (+) ? else if (b == 0) ok = true; else ok = (produit < 0); // (+)*(-) -> (-) ? } else if (a == 0) { ok = true; } else { if (0 < b) ok = (produit < 0); // (-)*(+) -> (-) ? else if (b == 0) ok = true; else ok = (produit > 0); // (-)*(-) -> (+) ? } The problem is that "10000000000000000 * 10000" give 7766279631452241920. It's not the "expected result". I know that GMP is the best solution, but I don't want to use it, I prefer to just use long long. I search in gcc code, but I didn't found the __multi3 function. I just found #define __muldi3 __multi3 in gcc/libgcc2.h. Any idea ? Bye, Haypo