c++ - Bad multiplication
- Piotr Grochowski (28/28) Aug 21 2022 When I compile and run this script,
- Piotr Grochowski (30/30) Aug 21 2022 Additional test cases:
When I compile and run this script, ```cpp #include <iostream> int main(){unsigned long long q=20;q=q*50;std::cout<<q;return 0;} ``` The expected output is 1000, as in Visual C++ 2005: ``` C:\Users\Acer\Documents\test>cl /EHsc debug.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. debug.cpp Microsoft (R) Incremental Linker Version 8.00.50727.42 Copyright (C) Microsoft Corporation. All rights reserved. /out:debug.exe debug.obj C:\Users\Acer\Documents\test>debug 1000 ``` but in Digital Mars C++ compiler, it makes it print 4294967297000 instead. ``` C:\Users\Acer\Documents\test>dmc debug.cpp -I D:/dm/stlport/stlport link debug,,,user32+kernel32/noi; C:\Users\Acer\Documents\test>debug 4294967297000 ```
Aug 21 2022
Additional test cases: ```cpp #include <iostream> int main(){unsigned long long q=20480,w=488281250;const unsigned long long a=20480,s=488281250; std::cout<<a*s<<' '<<a*w<<' '<<q*s<<' '<<q*w;return 0;} ``` ``` 10000000000000 5652766404163837952 5652766404163837952 10000000000000 ``` ```cpp #include <iostream> int main(){unsigned long long q=8192,w=1220703125;const unsigned long long a=8192,s=1220703125; std::cout<<a*s<<' '<<a*w<<' '<<q*s<<' '<<q*w;return 0;} ``` ``` 10000000000000 10000000000000 5652766404163837952 10000000000000 ``` ```cpp #include <iostream> int main(){unsigned long long q=524288,w=19073486328125;const unsigned long long a=524288,s=19073486328125; std::cout<<a*s<<' '<<a*w<<' '<<q*s<<' '<<q*w;return 0;} ``` ``` 10000000000000000000 10000000000000000000 9939201405030498304 10000000000000000000 ```
Aug 21 2022